回复: 34
收起左侧

FB 8/19 面经

本楼:   👍  0
0%
0%
0   👎
全局:   15
100%
0%
0

2016(7-9月) 码农类General 博士 全职@facebook - 内推 - Onsite  | | Other | 在职跳槽

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x


两轮design, 两轮 coding
design 答得不好, 问得很细,

coding 有一轮不好:

您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
terative 。 时间不够了。。。

有什么比较好的办法 ?

评分

参与人数 2大米 +40 收起 理由
mnmunknown + 10 感谢分享!
夏虫不知雪花 + 30

查看全部评分


上一篇:rocket fuel 电面
下一篇:Amazon onsite 8/18/16 分享面经, 攒人品!!!
aifer 2016-10-12 05:45:14 | 显示全部楼层
本楼:   👍  6
86%
14%
1   👎
全局:   182
99%
1%
1
minggr 发表于 2016-10-10 01:51
Iteration如下,就是post-order traversal的iterative版本

贴个自己的code.用的是level traversal,找出最深层的head和tail节点,用一个map来track 节点到父节点的映射。
如果head 和tail相等,说明最深层就一个节点,如果不等,分别从map里向parent节点搜索,知道发现一个公共的节点即为LCA。
public int lcaBFS(TreeNode root) {
                if(root == null)        return -1;
                // <node -> parent node>
                Map<TreeNode, TreeNode> map = new HashMap<TreeNode, TreeNode>();

                TreeNode head = null, tail = null;        // the head and tail node in a level
                Queue<TreeNode> que = new LinkedList<TreeNode>();
                que.offer(root);
                map.put(root, null);
                while(!que.isEmpty()) {
                        head = null; tail = null;
                        int sz = que.size();
                        while(sz-- > 0) {
                                TreeNode curr = que.poll();
                                if(head == null)        head = curr;
                                if(sz == 0)        tail = curr;
                                if(curr.left != null) {
                                        map.put(curr.left, curr);
                                        que.offer(curr.left);
                                }
                                if(curr.right != null) {
                                        map.put(curr.right, curr);
                                        que.offer(curr.right);
                                }
                        }
                }

                while(head != tail){
                        head = map.get(head);
                        tail = map.get(tail);
                }
                return head.val;
        }

评分

参与人数 1大米 +5 收起 理由
UUOlidd + 5 欢迎来一亩三分地论坛!

查看全部评分

回复

使用道具 举报

hychin 2016-8-19 12:16:21 | 显示全部楼层
本楼:   👍  4
100%
0%
0   👎
全局:   1043
88%
12%
142
recursive 直接DFS找最底层最左和最右边的点然后求这两个点的LCA即可,iteration就变成BFS找最后一层的第一个和最后一个,找出点后求LCA即可
回复

使用道具 举报

zzh730 2016-8-20 12:20:08 | 显示全部楼层
本楼:   👍  3
100%
0%
0   👎
全局:   198
99%
1%
1
最近这个题很高频啊,其实dfs遍历,返回的时候返回lca和depth,每个node如果有大于一个子节点的depth相同就返回这个node,如果有一个子节点depth更深就返回个子节点lca,这个o(n)就可以了
回复

使用道具 举报

ChrisGates23 2016-8-19 12:07:49 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   324
96%
4%
15
能说说design的题目吗
回复

使用道具 举报

xihaokai1 2016-8-19 12:14:02 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   4
100%
0%
0
有一个比较naive的想法,先BFS(同时用map存节点映射到父节点)到最后一层,然后从最后一层开始往上找父节点直到只有一个父节点。
回复

使用道具 举报

zq13667243992 2016-8-19 12:15:56 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   9
82%
18%
2
iterative感觉可以用一个HashMap 得到最深节点到根节点的路径。然后K个最深节点求交点。
回复

使用道具 举报

 楼主| lvvvvv 2016-8-19 12:29:43 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   15
100%
0%
0
hychin 发表于 2016-8-19 12:16
recursive 直接DFS找最底层最左和最右边的点然后求这两个点的LCA即可,iteration就变成BFS找最后一层的第一 ...

理论上是这样,
每一层记录一个leftmost, 一个 rightmost, 如果没有下层了, 再从 root 找 path ?
感觉应该有更好办法 。
回复

使用道具 举报

熊亮亮111 2016-8-19 12:53:26 | 显示全部楼层
本楼:   👍  2
100%
0%
0   👎
全局:   112
98%
2%
2
DFS的话,最直接的办法还是iterative  post order traversal用hashmap存每个child node的深度和candidate。 hashmap可以变走边删除 space 也能做到O(h)  time 还是O(N)

BFS也可以 level order traversal 每个node 都带一个path info  比如向左是0  向右是1  最后一层的所有node的共同前缀就是lca 第一个例子 最后一层5 、6 就是010 011  共同前缀是01  也就是 3那个node 第二个例子最后一层是4 5 6  就是000 010 011  共同前缀是0  就是root 1 node
回复

使用道具 举报

sitsit 2016-8-20 01:01:08 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   2
50%
50%
2
我的想法是: BFS,保存每一层的queue,queue的节点中保存该节点父亲节点在上一层中的位置。遍历完之后,对最后一个队列的头尾俩节点同时向上搜索父亲,直到父亲相同。有点绕,不知到说清楚没有
回复

使用道具 举报

cacofish 2016-8-20 04:35:19 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   3
75%
25%
1
为啥我觉得题目不太看得懂。如果只有一个节点深度3, 一个节点深度2,返回谁的LCA?如果一个深度3,两个深度2,返回哪两个的LCA
回复

使用道具 举报

sitsit 2016-8-20 11:14:38 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   2
50%
50%
2
cacofish 发表于 2016-8-20 04:35
为啥我觉得题目不太看得懂。如果只有一个节点深度3, 一个节点深度2,返回谁的LCA?如果一个深度3,两个深 ...

返回深度3节点本身
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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