📣 独立日限时特惠: VIP通行证立减$68
楼主: jianpanxia
跳转到指定楼层
上一主题 下一主题
收起左侧

Google 1月11日阳光谷面经(最后一轮神仙题求解答)

🔗
vividlau 2019-2-2 01:52:15 | 只看该作者
全局:
最后一题拓扑排序吧。正常的拓扑排序是入度为0的拿走。
这里是connection小于3的拿走。拿走的同时,比如拿走c, check c 的邻接表,所有c的邻居connection减一,如果出现connection小于3的,又加进queue.
回复

使用道具 举报

🔗
杨超越 2019-2-2 02:47:24 | 只看该作者
全局:
richpanda 发表于 2019-2-2 01:35
最后一题有点无向图里面找强链接cluster的意思。解题时只要注意到小于三条边的点肯定是不满足条件,是要剔 ...

波洋葱那个是min height tree! hahaha
回复

使用道具 举报

🔗
百晓生 2019-2-2 03:09:40 | 只看该作者
全局:
用A认识的人建立无向图,例如节点为 B C D E F,用个map或者数组记录各个节点的degree, 把degree小于3的放在queue里面(例子中是C) 然后BFS,每次把queue中每个节点相连接的节点再degree--, 如果该相邻节点degree小于3再放入queue中。最后剩下的degree大于等于3的节点就是最后被邀请的。

补充内容 (2019-2-2 07:31):
另外请问下第二题面试官给的做法是啥?Union Find?

评分

参与人数 4大米 +14 收起 理由
TheMiracle + 3 很有用的信息!
Bobyyc + 3 给你点个赞!
xh_pku + 5 可以说是最优解了
forbread + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
蓝冰 2019-2-2 03:49:22 | 只看该作者
全局:
请问转SETI 那当天的 SDE onsite还继续面吗
回复

使用道具 举报

🔗
sdwrz16 2019-2-2 04:04:35 | 只看该作者
全局:
感谢楼主分享,

第二轮没大看懂岛屿的定义, 是有一部分1围成一个圈就可以? 还是说必须全部都是1?

第四轮我的思路类似拓扑排序, 以楼主的例子来, 先把A能邀请的所有人放在HashMap的key里,对应的value就是一个set, 包含他们每个人的朋友同时也被A邀请了, 然后BFS扫, 只要set的size小于3, 就放到queue里, 然后修改邻居的set, 如果修改的时候set的size又变小了, 再放到queue里, 直到queue为空跳出, 最后HashMap里剩下的就是可以被邀请的人. 具体如下, 最开始的HashMap:
B: CDEF
C: BF
D: BEF
E: BDF
F: BCDF
C的set的size小于3, 所以先把C放进queue, 同时hashmap里删掉C, 在B和F的set里把C删掉, 变成
B:DEF
D:BEF
E:BDF
F:BDF
因为B和F的set的size还是大于等于3的, 所以不放入queue, queue空了, 跳出循环, 返回所有剩下的key:BDEF
回复

使用道具 举报

🔗
jiahe0510 2019-2-2 04:28:07 | 只看该作者
全局:
这道题是不是有点像clique问题呢?
回复

使用道具 举报

全局:
杨超越 发表于 2019/02/02 01:07:14


其实只需要把所有出现过的人 建立图 然后统计一下connection 个数就行 你的方法是正确的 点赞

看了大家的回复,都把问题想麻烦了。并且拓扑排序是针对有向无环图的,不适用于这个场景。
回复

使用道具 举报

🔗
 楼主| jianpanxia 2019-2-2 08:30:14 | 只看该作者
全局:
百晓生 发表于 2019-2-2 03:09
用A认识的人建立无向图,例如节点为 B C D E F,用个map或者数组记录各个节点的degree, 把degree小于3的放 ...

嗯。我当时想的方法是默认所有人都会被邀请,然后再DFS遍历的过程中去一个个排除不会被邀请的人,感觉差不多。但是最后发现可能有个bug就是我假设了所有人都会别邀请,然后再DFS的过程中使用了这个假设,那最后会不会因为假设不成立而影响最后的结果呢。。。因为是否被邀请这个判断是很多人互相关联的,所以很复杂,后来就懒得想了。。。

第二题unionfind反而会更慢,还不如用DFS,我最后给的方法是不用DFS判断所有点,而是只判断border的点,然后判断这两个border是不是属于同一片岛屿。
回复

使用道具 举报

🔗
 楼主| jianpanxia 2019-2-2 08:57:21 | 只看该作者
全局:
iejr 发表于 2019-2-1 15:41
我觉得是先假设邀请所有a的朋友,然后去掉不达成条件的(朋友中少于三个被邀请的),再看被刚去掉的殃及到的 ...

我觉得理论上可以,但是实现起来很麻烦,要一直loop,最坏的时间复杂度是非常高的
回复

使用道具 举报

🔗
 楼主| jianpanxia 2019-2-2 09:00:04 | 只看该作者
全局:
pengdu 发表于 2019-2-1 18:27
最后一题感觉楼主想麻烦了。

首先,如果如果给的图里面每个节点都有至少三条边的话,就直接邀请所有人就好 ...

不是A的朋友就可以不画进图里吧?我当时是把所有人都建了图,包括不是A朋友的那些人。关于BST,我觉得这题如果要建图,并不是一个BST,因为每个节点可能有超过两个子节点而且子节点可能和ancestor相连,不知道我理解的对不对。
回复

使用道具 举报

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

本版积分规则

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