12
返回列表 发新帖
楼主: Smilenceyu
跳转到指定楼层
上一主题 下一主题
收起左侧

[树/链表/图] 讨论个看到过多次的面经题

🔗
 楼主| Smilenceyu 2020-9-14 09:02:54 来自APP | 只看该作者
全局:
qldx 发表于 2020-09-13 17:50:04
那如果是说有先后顺序的必须要先满足前面的,没有任何先决条件的都可以同时进行的话,那不就是210. Course Schedule II的普通拓扑排序了么?
210 是直接输出一整个 这个需要每一层分别输出 比如 层和层之间有先后关系
回复

使用道具 举报

🔗
qldx 2020-9-14 09:06:56 | 只看该作者
全局:
这个没关系,可以用bfs来进行,一层一层的更新
  1.    
  2. def findOrder(self, numCourses, prerequisites):
  3.         """
  4.         :type numCourses: int
  5.         :type prerequisites: List[List[int]]
  6.         :rtype: List[int]
  7.         """
  8.         indegree = dict()#每个课程依赖于哪些课程
  9.         outdegree = dict()#每个课程决定哪些课程
  10.         for i,j in prerequisites:
  11.             if i not in indegree:
  12.                 indegree[i] = set()#{2:{1}}
  13.             indegree[i].add(j)
  14.             if j not in outdegree:
  15.                 outdegree[j] = set()# {1:{2}}
  16.             outdegree[j].add(i)

  17.         res = []
  18.         level = [i for i in range(numCourses) if i not in indegree]
  19.         res = [[i for i in range(numCourses) if i not in indegree]]
  20.         while level:
  21.             newlevel = []
  22.             for i in level:
  23.                 if i in outdegree:
  24.                     for j in outdegree[i]:
  25.                         indegree[j].remove(i)
  26.                         if len(indegree[j])==0:
  27.                             newlevel.append(j)
  28.             level = newlevel
  29.             res.append(level)
  30.         return res
复制代码
回复

使用道具 举报

🔗
 楼主| Smilenceyu 2020-9-14 09:16:33 来自APP | 只看该作者
全局:
qldx 发表于 2020-09-13 18:06:56
这个没关系,可以用bfs来进行,一层一层的更新
   
def findOrder(self, numCourses, prerequisites):
这个好像会有问题 比如 [ A, B] , [ A, C], [C, B] 如果先从a访问到B 就会把B放进第二层 但其实应该放进第三层
回复

使用道具 举报

无效楼层,该帖已经被删除
🔗
qldx 2020-9-14 09:37:46 | 只看该作者
全局:
Smilenceyu 发表于 2020-9-14 09:16
这个好像会有问题 比如 [ A, B] , [ A, C], [C, B] 如果先从a访问到B 就会把B放进第二层 但其实应该放进第 ...

我感觉应该是可行的,这个算法我写过几次(不过由于题目有些许差异,上面那个代码返回的结果是反的),第一次把没有前提条件的放在level中,然后对level里的每个元素,去掉对应关系(比如你的这个例子,刚开始level=[A], 去掉[A,C],[A,B] 之后,C的前提条件那里就是空的了,然后放进新的level里,但是B的前提条件还是有元素的,所以还得再进行一轮)
回复

使用道具 举报

🔗
 楼主| Smilenceyu 2020-9-14 09:50:23 来自APP | 只看该作者
全局:
qldx 发表于 2020-09-13 18:37:46
我感觉应该是可行的,这个算法我写过几次(不过由于题目有些许差异,上面那个代码返回的结果是反的),第一次把没有前提条件的放在level中,然后对level里的每个元素,去掉对应关系(比如你的这个例子,刚
Ic 所以用kahns algorithm 的确是可以的 好像会比dfs方便一些
回复

使用道具 举报

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

本版积分规则

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