一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 470|回复: 3
收起左侧

Google 店面

[复制链接] |试试Instant~ |关注本帖
Edwardie 发表于 2016-11-21 08:57:31 | 显示全部楼层 |阅读模式

2016(10-12月) 码农类 本科 全职@Google - Other - 技术电面 |Failfresh grad应届毕业生

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

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

x
generic tree。 每個node 有自己的id, parent id, 和 value。 給一個array of tree node。 求出每個node 的subtree 和。

本帖被以下淘专辑推荐:

antonioybw 发表于 2016-11-21 09:11:47 | 显示全部楼层
请问generic 是什么意思?  给的tree 不是树状结构 而是存在数组里面吗?       是不是求subtree sum的时候不是遍历树状而是数组了呢  谢谢
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-11-21 10:03:25 | 显示全部楼层
这里的"每個node 的subtree 和"是指以每个node为根节点的subtree节点value之和吗?不知道id的类型是什么,我就用template写了一个统一的(假设id类型hash和equal operator已经存在,i.e.,可以用作hashmap的key)。就是把每个node的value加到自身和以及沿着parent链的每个node上。
  1. template<typename T>
  2. struct Node { T id, parent; double value; };
  3. unordered_map<Node<T>*, double> subtreeSum(vector<Node*>& tree) {
  4.   unordered_map<T, Node<T>*> nodes; unordered_map<Node<T>*, double> res;
  5.   for (auto& x:tree) nodes[x->id] = x;
  6.   for (auto& p:nodes) {
  7.     auto node = p.second;. 1point 3acres 璁哄潧
  8.     double v = node->val; res[node] += v;
  9.     while (node->id != node->parent) {
  10.       node = nodes[node->parent];
  11.       res[node] += v;
  12.     }
  13.   }
  14.   return res;
  15. }
复制代码

补充内容 (2016-11-21 10:04):
. more info on 1point3acres.com貌似时间复杂度平均O(N*logN), 最差O(N^2)。空间O(N).
回复 支持 反对

使用道具 举报

zzgzzm 发表于 2016-11-21 10:10:33 | 显示全部楼层
antonioybw 发表于 2016-11-21 09:11
请问generic 是什么意思?  给的tree 不是树状结构 而是存在数组里面吗?       是不是求subtree sum的时候 ...

我不是LZ.
我的理解:generic就是说是一般的tree,每个node的child nodes个数不定。
用哪一种种数据结构只是表现形式不同,并不是generic的定义。这里用数组和定义id只是与传统意义下用child指针的表现形式不同而已。
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

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

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-6 08:46

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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