由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 一道fb的题,clone a graph
相关主题
包子求大牛:C++的list iterator实现经典面试题
一道G家题目T problem
链表复制问题
相关话题的讨论汇总
话题: node话题: root话题: map话题: neighbors话题: clone
进入JobHunting版参与讨论
1 (共1页)
d********w
发帖数: 363
1
大家看我这样写对么,dfs来做,map来保存是否之前遇过。
1 struct Node {
2 int val;
3 vector neighbors;
4 }
5
6 Node* clone(Node *root, HashMap& map) {
7 if (root == NULL) {
8 return NULL;
9 }
10 if (map.find(root) != map::end()) {
11 return map[root];
12 }
13
14 Node* p = new Node();
15 p->val = root->val;
16 p->neighbors = new vector();
17 vector& v = p->neighbors;
18 for (int i=0; ineighbors.size(); i++) {
19 Node* orig = root->neighbors[i];
20 v.add(clone(orig, map));
21 }
22 map[root] = p;
23 return p;
24 }
p*****2
发帖数: 21240
2

打牛再面F呀?

【在 d********w 的大作中提到】
: 大家看我这样写对么,dfs来做,map来保存是否之前遇过。
: 1 struct Node {
: 2 int val;
: 3 vector neighbors;
: 4 }
: 5
: 6 Node* clone(Node *root, HashMap& map) {
: 7 if (root == NULL) {
: 8 return NULL;
: 9 }

t******e
发帖数: 98
3
lz算法没问题。我的程序如下请指教:
// copy graph
struct node
{
int id;
vector adj;
node(int id) : id(id){}
};
map hash;
node* copy(node* x)
{
if(!x) return 0;
if(hash.count(x) != 0) return hash[x];
hash[x] = new node(x->id);
node* y = hash[x];
for(int i = 0; i < x->adj.size(); ++i){
y->adj.push_back(copy(x->adj[i]));
}
return y;
}
r*****b
发帖数: 310
4
A few questions here:
1. Do we need line 16
2. Shall we move line 22 before the loop that starts from line 18?
Here is my implementation:
http://basicalgos.blogspot.com

【在 d********w 的大作中提到】
: 大家看我这样写对么,dfs来做,map来保存是否之前遇过。
: 1 struct Node {
: 2 int val;
: 3 vector neighbors;
: 4 }
: 5
: 6 Node* clone(Node *root, HashMap& map) {
: 7 if (root == NULL) {
: 8 return NULL;
: 9 }

s******n
发帖数: 3946
5
很好,标准interview答案
z*****n
发帖数: 447
6
算法应该没错,语法好像有2个小问题
1) HashMap 第二个参数Node *其实没有用上,用C++的话,可以改

unordered_set
2) Line 17, & 应该是 *

【在 d********w 的大作中提到】
: 大家看我这样写对么,dfs来做,map来保存是否之前遇过。
: 1 struct Node {
: 2 int val;
: 3 vector neighbors;
: 4 }
: 5
: 6 Node* clone(Node *root, HashMap& map) {
: 7 if (root == NULL) {
: 8 return NULL;
: 9 }

x****g
发帖数: 325
7
line 22 should be moved before the loop.

【在 d********w 的大作中提到】
: 大家看我这样写对么,dfs来做,map来保存是否之前遇过。
: 1 struct Node {
: 2 int val;
: 3 vector neighbors;
: 4 }
: 5
: 6 Node* clone(Node *root, HashMap& map) {
: 7 if (root == NULL) {
: 8 return NULL;
: 9 }

1 (共1页)
进入JobHunting版参与讨论
相关主题
经典面试题一道G家题目
T problem链表复制问题
包子求大牛:C++的list iterator实现
相关话题的讨论汇总
话题: node话题: root话题: map话题: neighbors话题: clone