一亩三分地论坛

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

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

Google電面

[复制链接] |试试Instant~ |关注本帖
swordx 发表于 2015-10-28 11:46:51 | 显示全部楼层 |阅读模式

2016(10-12月) 码农类 硕士 全职@Google - 内推 - 技术电面 |Otherfresh grad应届毕业生

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

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

x
上午接到了gg电面,一共就做了一道题,是leetcode Number Of Islands的升级版。. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

说有一个map,每个cell都是0和1,其中的1构成连通区域(Islands)。
现在进行update操作,即给定一个cell,变成1,求update之后的连通区域个数。
说了几种思路,面试官都觉得复杂度高。
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
最后实现的方法是:
先进行初始DFS,一边count一边对每个cell作标号。同一连通区域标号相同。
每次update时,检查上下左右四个标号,看属于几个连通区域。即可得到结果。
同时,对这四个标号进行映射,比如本来属于标号为1、2、3、4的四个区域,被update操作连通之后,把它们四个都映射为标号1。这样就不用再次DFS修改每个cell的标号。

面试官觉得,如果一个标号经过多次update之后,被多次映射,复杂度还是高,还有更好的方法。. 1point 3acres 璁哄潧
反正我是没想出来,有人有更好的方法吗?

评分

1

查看全部评分

本帖被以下淘专辑推荐:

宝贝忆彼岸 发表于 2015-10-28 12:07:16 | 显示全部楼层
是不是quick union?不用每次都更新每个cell,连接起来只用更新root就可以了
回复 支持 反对

使用道具 举报

不高兴 发表于 2015-10-28 12:17:07 | 显示全部楼层
DFS的时候多传一个int参数,是当前island的个数,于是每个island被标记的值都不一样,最后看updated cell上下左右四个cell是否属于island,有多少个不同标记就可以了。不知道想法对不对?
回复 支持 反对

使用道具 举报

plich 发表于 2015-10-28 12:25:13 | 显示全部楼层
union find

http://www.1point3acres.com/bbs/thread-137243-1-1.html

有一个完整的解释以及代码……
回复 支持 反对

使用道具 举报

 楼主| swordx 发表于 2015-10-28 12:27:07 | 显示全部楼层
不高兴 发表于 2015-10-28 12:17. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
DFS的时候多传一个int参数,是当前island的个数,于是每个island被标记的值都不一样,最后看updated cell上 ...
. visit 1point3acres.com for more.
我就是这么做的,问题出在update之后标记的更改上
回复 支持 反对

使用道具 举报

 楼主| swordx 发表于 2015-10-28 12:29:20 | 显示全部楼层
宝贝忆彼岸 发表于 2015-10-28 12:07
是不是quick union?不用每次都更新每个cell,连接起来只用更新root就可以了

我的做法也是不用更新每个cell,而是这个区域被连通之后,每个cell的标号都不变,但是映射到了另一个标号上
回复 支持 反对

使用道具 举报

 楼主| swordx 发表于 2015-10-28 12:29:36 | 显示全部楼层
plich 发表于 2015-10-28 12:25
union find. visit 1point3acres.com for more.

http://www.1point3acres.com/bbs/thread-137243-1-1.html

谢谢!我去读一下
回复 支持 反对

使用道具 举报

 楼主| swordx 发表于 2015-10-28 12:40:06 | 显示全部楼层
plich 发表于 2015-10-28 12:25. Waral 鍗氬鏈夋洿澶氭枃绔,
union find

http://www.1point3acres.com/bbs/thread-137243-1-1.html

虽然我没有用并查集,但貌似我的思路跟这个是差不多的。可能区别在于这个解法考虑了平衡,而我没有考虑吧。
回复 支持 反对

使用道具 举报

plich 发表于 2015-10-28 23:00:06 | 显示全部楼层
swordx 发表于 2015-10-28 12:40. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
虽然我没有用并查集,但貌似我的思路跟这个是差不多的。可能区别在于这个解法考虑了平衡,而我没有考虑吧 ...

或许在interviewer的眼里只有想到用树的时候才会算是“差不多”吧……
回复 支持 反对

使用道具 举报

pengzewen37 发表于 2015-10-28 23:07:49 | 显示全部楼层
用并查集,复杂度能达到O(n)
回复 支持 反对

使用道具 举报

pengzewen37 发表于 2015-10-28 23:36:07 | 显示全部楼层
swordx 发表于 2015-10-27 23:40
虽然我没有用并查集,但貌似我的思路跟这个是差不多的。可能区别在于这个解法考虑了平衡,而我没有考虑吧 ...

优化一下union find的find 方法,对于find 和 union方法平均是可以达到O(1)的查询度,所以时间复杂度只用考虑建表,加iterate一遍update数组的时间复杂度(assume给的是一个坐标数组,每次都做一次update操作)。
回复 支持 反对

使用道具 举报

本版积分规则

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

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

关闭

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

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

custom counter

GMT+8, 2016-12-9 00:42

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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