关注
第3题个人想法,(Java):用图表示各个任务之间的关系,图最终会是directed graph(如: a -> b 代表完成a才能完成b,这里b是a的邻居而a不是b的邻居(也不可能是,否则将死循环))(这里我会不停的使用node和任务这两个名词,它们代表一样的东西)
1)创造一个数组叫作neighbours, neighbours[i] 是一个LinkedList<Integer> 代表i的所有neighbour nodes.
2)创造一个数组叫做result, 用于记录最终任务顺序。在这里,添加任务时从数组的最后端开始添加,也就是说先添加最后完成的任务(原因在第4步)
3)创建一个数组visited, visited[i] = true 代表任务i/node i已经被加入result中
4) for i = 0,1,2,...,n, 对于node i 我们执行dfs(i) (如果visited[i] = true, 直接skip). 但这里需要对dfs稍做改变。改变为: 对于所有node i,只有当对其所有邻居都执行完dfs并回溯到自己本身(node i)时,才能把任务i添加到result中(记得是由后往前添加)并且set visited[i] = true。因为这样的话,对于所有node来说,当我们回溯到某个node时说明此node能解锁的任务都已添加到result了,这时我们可以在不影响正确性的情况下将此node添加到result中。
5)return result;
设n = 任务数量
设v = input 数组的数量 (也就是在以上算法中的number of directed edges)
时间复杂度:O(v + n) = O(v) (因为v >= n)
查看原帖
1 2
相关推荐
点赞 评论 收藏
分享
05-27 13:35
郑州大学 后端 点赞 评论 收藏
分享


点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的实习收获 #
18298次浏览 339人参与
# 夸夸我的求职搭子 #
190555次浏览 1890人参与
# 实习吐槽大会 #
20695次浏览 96人参与
# 小厂实习有必要去吗 #
46081次浏览 267人参与
# 晒一晒你的工位 #
82087次浏览 290人参与
# 我的租房踩坑经历 #
12128次浏览 168人参与
# 穿越回高考你还会选现在的专业吗 #
13953次浏览 188人参与
# 毕业旅行去哪玩儿 #
693次浏览 22人参与
# 工作压力大怎么缓解 #
78947次浏览 934人参与
# 实习中的菜狗时刻 #
365157次浏览 3290人参与
# 今年形式下双非本找得到工作吗 #
140102次浏览 1065人参与
# 互联网公司评价 #
382722次浏览 3796人参与
# 产运销实习日记 #
51739次浏览 544人参与
# 携程求职进展汇总 #
526332次浏览 3896人参与
# 你最满意的offer薪资是哪家公司? #
25700次浏览 134人参与
# 中兴求职进展汇总 #
602907次浏览 2641人参与
# 选完offer后,你后悔学机械吗? #
29087次浏览 162人参与
# 我的第一份实习怎么找的 #
105761次浏览 1041人参与
# 电网笔面经互助 #
33384次浏览 333人参与
# 机械人避雷的岗位/公司 #
17769次浏览 147人参与