楼主: flykite083
跳转到指定楼层
上一主题 下一主题
收起左侧

[树/链表/图] 求教Airbnb的graph traversal问题

🔗
tm1234 2018-2-22 08:34:34 | 只看该作者
全局:
scarlettzzhang 发表于 2018-2-19 16:51
这题写个Union Find应该也可以吧?return number of connected component

我也觉得union find可解,不知道有没有更高效的方法 因为普通写法的find复杂度也比较高?
回复

使用道具 举报

全局:
leetcode上是不是还没有这道题?
回复

使用道具 举报

🔗
Oshino 2019-3-1 13:41:12 | 只看该作者
全局:
这个题 目前可行的应该只有强连通分量缩环的方法(个人觉得也只有这个方法能到O(n))
楼上其他方法的都不大可行。多想想复杂的例子 肯定过不了的。

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
garyyang 2019-3-3 09:01:55 | 只看该作者
全局:
这不是 minimized spanning tree就是shortest path, 路径的value是0?
回复

使用道具 举报

🔗
robinbach 2019-3-7 19:25:38 | 只看该作者
全局:
先去环 之后topological sort找入度为0的点应该可解 union find应该不行因为每个路径的点集不是单纯的disjoint set 一个点可以有多个入度为0的parent

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
nole 2019-3-18 03:22:36 | 只看该作者
全局:
对于这个给定的有向图,答案是什么?1 或 2?
回复

使用道具 举报

🔗
mren 2019-3-18 15:26:00 | 只看该作者
全局:
  1. private void DFS(Set<Integer> visited, int index, List<Integer> ret, Map<Integer, Set<Integer>> hash) {
  2.         visited.add(index);
  3.         for(int val: hash.getOrDefault(index, new HashSet<>())) {
  4.             if(ret.contains(val)) ret.remove(val);
  5.             if(!visited.contains(val)) {
  6.                 DFS(visited, val, ret, hash);
  7.             }
  8.         }
  9.     }

  10.     public List<Integer> findMin(int[][] edges, int n) {
  11.         Map<Integer, Set<Integer>> hash = new HashMap<>();
  12.         for(int[] edge: edges) {
  13.             if(edge[0] == edge[1]) continue;
  14.             hash.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]);
  15.         }
  16.         Set<Integer> visited = new HashSet<>();
  17.         List<Integer> ret = new ArrayList<>();
  18.         for(int i = 0; i <= n; i++) {
  19.             if(visited.contains(i)) continue;
  20.             ret.add(i);
  21.             DFS(visited, i, ret, hash);
  22.         }
  23.         return ret;
  24.     }
复制代码
回复

使用道具 举报

🔗
seaskymonster 2019-3-19 06:13:00 | 只看该作者
全局:
mren 发表于 2019-3-18 15:26
[mw_shl_code=java,true]private void DFS(Set visited, int index, List ret, Map hash) {
        visit ...

if(ret.contains(val)) ret.remove(val);

补充内容 (2019-3-19 06:13):
这行好棒,这样就不用合并 SCC了。。

补充内容 (2019-3-19 06:22):
如果 图里面有个 环呢 ?  比如:0-> 1,  and 0 -> 1 .  你的答案是0.
回复

使用道具 举报

🔗
mren 2019-3-19 11:37:06 | 只看该作者
全局:
seaskymonster 发表于 2019-3-19 06:13
if(ret.contains(val)) ret.remove(val);

补充内容 (2019-3-19 06:13):

0 -> 1
1 -> 0
的话是一个环,首先访问0,然后DFS的时候会访问到1,然后当继续DFS的时候访问0,但是0被标记了,这样就结束了,结果就是0
回复

使用道具 举报

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

本版积分规则

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