查看: 3021| 回复: 17
跳转到指定楼层
上一主题 下一主题
收起左侧

[找工就业] 前两天面试的一道题,想不出来应该用什么方法!求大神解答!

全局:

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

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

x
题目很简单:求联通区域,输入是[[A, B, C], [B, D], [E]],就表明ABC联通,BD联通,E是单独的,这样可以得到ABCD联通,所以就返回:[[A, B, C, D], [E]]
. check 1point3acres for more.
感觉在leetcode上没有遇到相似的题目, 我刷题也不太多大概200道左右,不知道应该用BFS还是DFS,也不知道具体应该怎么写?
希望地里面的大神有看见的可以解答一下!反正面试挂了,但是还是很想知道应该怎么做哈哈哈。




补充内容 (2019-8-15 12:20):
如果有朋友可以帮忙加个米就更好了

补充内容 (2019-8-15 12:20):
. Waral dи,这个题是字节跳动美研所的电面的题,面试官冷冷的完全不说话也不给提示。。。

上一篇:有去tapia会议的吗?求交流
下一篇:【不懂就问一问】求推荐一个online cs master program
推荐
waoxc 2019-8-15 12:07:29 | 只看该作者
全局:
典型的Union Find题目,楼主可以在Leetcode上找找相应的tag做一下
回复

使用道具 举报

推荐
TGGSJ911 2019-8-15 12:16:33 | 只看该作者
全局:
感觉有点像leetcode里的merge interval
回复

使用道具 举报

推荐
cecilianxf 2019-8-20 20:14:00 | 只看该作者
全局:
Union find...
以下是一个用uf的例子. check 1point3acres for more.
  1. # union find
  2.     def initialize(self,accounts):. check 1point3acres for more.
  3.         self.id_to_email = {}
  4.         self.father = {}
  5.         for user_id, emails in enumerate(accounts):. From 1point 3acres bbs
  6.             self.father[user_id] = user_id
  7.             self.id_to_email[user_id] = set(emails[1:])
  8.     def find(self,user_id):
  9.         path = []
  10.         while user_id != self.father[user_id]:
  11.             path.append(user_id)
  12.             user_id = self.father[user_id].
  13.         for n in path:
  14.             self.father[n] = user_id
  15.         return user_id
  16.             
  17.     def union(self,d1, d2):
    . Χ
  18.         root_id1 = self.find(d1)
  19.         root_id2 = self.find(d2)
  20.         if root_id1!= root_id2:
  21.             self.father[root_id1] = root_id2
  22.             self.id_to_email[root_id2] = self.id_to_email[root_id1].union(self.id_to_email[root_id2])
复制代码
回复

使用道具 举报

🔗
 楼主| 口才张 2019-8-15 12:18:32 | 只看该作者
全局:
waoxc 发表于 2019-8-15 12:07
. check 1point3acres for more.典型的Union Find题目,楼主可以在Leetcode上找找相应的tag做一下
. 1point3acres
嗯嗯朋友们都说是union find, 我在想可以可以用搜索实现
回复

使用道具 举报

🔗
 楼主| 口才张 2019-8-15 12:19:25 | 只看该作者
全局:
TGGSJ911 发表于 2019-8-15 12:16
感觉有点像leetcode里的merge interval

这个input中每个list不是只有两个元素啊,可以有好几个并且无序,感觉和merge interval差别挺大的呀
回复

使用道具 举报

🔗
waoxc 2019-8-15 12:47:32 | 只看该作者
全局:
口才张 发表于 2019-8-15 12:18. 1point 3acres
嗯嗯朋友们都说是union find, 我在想可以可以用搜索实现

可以,build一个无向graph,以你的例子,{a--b--c, b--d, e}, "--"代表一条边,然后用一个visited set做DFS,比较麻烦,还是推荐union find
回复

使用道具 举报

🔗
TGGSJ911 2019-8-15 12:55:40 | 只看该作者
全局:
口才张 发表于 2019-8-15 12:19
这个input中每个list不是只有两个元素啊,可以有好几个并且无序,感觉和merge interval差别挺大的呀

感觉还是可以每个数组排序,字典序这种,然后用merge interval的方法。
回复

使用道具 举报

🔗
avicii2018 2019-8-15 21:10:30 | 只看该作者
全局:
最直接的就是按照开头排序(比如放到堆),然后根据 a[1] > b[0] 判断是否是重合的
回复

使用道具 举报

🔗
tiancaioyzy 2019-8-15 23:01:02 | 只看该作者
全局:
leetcode 标准 UnionFind,先Union ➕path compression ~ O(n),第二遍扫UF结构,找出根节点相同的子区域就好。第一遍遍历的时候可以加个map,省掉第二遍的遍历搜索。
回复

使用道具 举报

🔗
ytx2013 2019-8-20 13:16:05 | 只看该作者
全局:
的确是 union-find. 楼上几位已经给出了答案。
回复

使用道具 举报

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

本版积分规则

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