没结婚也能买房啊!大波士顿地区买房小tips

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推多家公司面试
[Google级团队]:实时大数据分析领域践行者
北京/深圳-大数据/搜索/机器学习职位
日志易机器大数据行业践行者Web/大数据/机器学习等职位-北京or深圳
把贵司招聘信息放这里
查看: 1647|回复: 14
收起左侧

求教一道脸书面经题

[复制链接] |试试Instant~ |关注本帖
oldman09 发表于 2017-6-23 06:37:07 | 显示全部楼层 |阅读模式

2017(4-6月) 码农类 硕士 全职@Facebook - 内推 - 技术电面  | Other | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
  1. class User {
  2.    String name;
  3.    List<User> friends;
  4.    User(String name, List<User> friends) {
  5.       this.name = name;
  6.       this.friends = friends;
  7.    }. From 1point 3acres bbs
  8. }

  9. User copy(User u) {. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  10. // implementation here.... Waral 鍗氬鏈夋洿澶氭枃绔,
  11. }
复制代码
如题,有一个user class,实现method deep copy 一个 user。注意环, 例如 b 是 a friend, c 是 b friend, a 是 c friend. 代码具体应该如何实现?


补充内容 (2017-6-23 06:41):
应该就是deep copy graph from root node,但是可以有环,应该怎么处理?

本帖被以下淘专辑推荐:

Linzertorte 发表于 2017-6-23 08:46:35 | 显示全部楼层
  1. #include <iostream>
  2. #include <vector>. 鍥磋鎴戜滑@1point 3 acres
  3. #include <unordered_map>
  4. #include <string>.鐣欏璁哄潧-涓浜-涓夊垎鍦
  5. using namespace std;
  6. class User { 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  7. public:
  8.     string name;
  9.     vector<User*> friends;
  10.     User(string name) {
  11.         this->name = name;
  12.     }
  13. };
  14. User *copy(User *u,unordered_map<User*, User*>& mp) {
  15.     if(mp.count(u)) return mp[u]; // alreay grey (in dfs path) or black
  16.    
  17.     // color grey
  18.     mp[u] = new User(u->name+" copy");
  19.     for(auto x:u->friends){
  20.         mp[u]->friends.push_back(copy(x,mp));. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  21.     }
  22.     return mp[u];
  23.     . visit 1point3acres.com for more.
  24.     //color black
  25. }
  26. int main(int argc, const char * argv[]) {
  27.     User* a = new User("a");
  28.     User* b = new User("b");
  29.     User* c = new User("c");
  30.     a->friends.push_back(b);
  31.     b->friends.push_back(c);
  32.     c->friends.push_back(a);
  33.     unordered_map<User*, User*> mp; // user to user copy map "a"->"a copy"
  34.     User* a_copy = copy(a,mp);
  35.     cout<<a_copy->name<<endl;
  36.     cout<<a_copy->friends[0]->name<<endl;.1point3acres缃
  37.     cout<<a_copy->friends[0]->friends[0]->name<<endl;
  38.    
  39.     return 0;
  40. }
复制代码


a copy
b copy.鐣欏璁哄潧-涓浜-涓夊垎鍦
c copy
Program ended with exit code: 0. 鍥磋鎴戜滑@1point 3 acres
回复 支持 1 反对 0

使用道具 举报

edyyy 发表于 2017-6-23 06:52:16 | 显示全部楼层
一样用hash记录哪些已经copy了?
回复 支持 反对

使用道具 举报

33847682 发表于 2017-6-23 06:57:28 | 显示全部楼层
这题坑的地方是不是要重写equal和hashcode函数?
回复 支持 反对

使用道具 举报

 楼主| oldman09 发表于 2017-6-23 06:59:34 | 显示全部楼层
33847682 发表于 2017-6-23 06:57
这题坑的地方是不是要重写equal和hashcode函数?

我也是一头雾水,但是目前知道的信息只有这么多
回复 支持 反对

使用道具 举报

 楼主| oldman09 发表于 2017-6-23 07:01:23 | 显示全部楼层
edyyy 发表于 2017-6-23 06:52
一样用hash记录哪些已经copy了?

比如说你在copy a,dfs到c,发现有一个friend a,此时a 还没有entry 在map,怎么办呢?
回复 支持 反对

使用道具 举报

Linzertorte 发表于 2017-6-23 08:18:25 | 显示全部楼层
dfs的染色可以染三种啊,白,灰,黑, 灰就代表还在dfs路径上。。你这种情况下,只要是灰,你就放着map里唄,反正也是指针。(java里是reference)
回复 支持 反对

使用道具 举报

FightOn 发表于 2017-6-23 08:18:48 | 显示全部楼层
用hashmap, oldNode -> newNode, 有环(keyset里面有当前node)就continue
回复 支持 反对

使用道具 举报

ftfotroy 发表于 2017-6-23 10:53:23 | 显示全部楼层
FightOn 发表于 2017-6-23 08:18.鐣欏璁哄潧-涓浜-涓夊垎鍦
用hashmap, oldNode -> newNode, 有环(keyset里面有当前node)就continue

赞username,一家人 哈哈
回复 支持 反对

使用道具 举报

scredwood 发表于 2017-6-27 11:40:18 | 显示全部楼层
有环不也还是 LC 上的 clone graph吗?  没区别啊。
回复 支持 反对

使用道具 举报

youziwry 发表于 2017-6-27 11:58:10 | 显示全部楼层
oldman09 发表于 2017-6-23 07:01
比如说你在copy a,dfs到c,发现有一个friend a,此时a 还没有entry 在map,怎么办呢?

a的值copy完后 立刻存进hashmap,之后再去copy friends list 这样之后绕回a的时候就能发现a已经在map里了
回复 支持 反对

使用道具 举报

scredwood 发表于 2017-6-27 12:03:40 | 显示全部楼层
youziwry 发表于 2017-6-27 11:58
a的值copy完后 立刻存进hashmap,之后再去copy friends list 这样之后绕回a的时候就能发现a已经在map里了

public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
    if (node == null) return null;
    if (map.containsKey(node)) return map.get(node);
    UndirectedGraphNode copy = new UndirectedGraphNode(node.label);
    map.put(node, copy);
    for (UndirectedGraphNode n : node.neighbors)
        copy.neighbors.add(cloneGraph(n));. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
    return copy;. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
}
. visit 1point3acres.com for more.
这样就好了。仔细过一遍,环根本不是问题。
回复 支持 反对

使用道具 举报

moonyellow 发表于 2017-7-9 05:53:42 | 显示全部楼层
解法是不是可以参考clone graph?
回复 支持 反对

使用道具 举报

chenqidi 发表于 2017-7-9 22:13:58 | 显示全部楼层
感觉就可以用clone graph来解啊
回复 支持 反对

使用道具 举报

byrlhb 发表于 2017-7-9 22:21:28 | 显示全部楼层
deep copy graph from root node也会有circle,但是并不影响
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-388663-1-1.html

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-4-21 12:09

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表