关注
第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
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 【比亚迪byd入职】因轻度脊柱侧弯被拒绝入职,没工作了陷入困境【求助】2.0W
- 2... 那些在焦虑里种下的希望,终于在大厂 offer 里开了花1.1W
- 3... 滴滴秋储 oc1.0W
- 4... 面试时反问这些显得很有"水平"9951
- 5... 从过来人视角告诉你,你不会找不到工作9168
- 6... 学院本27届如何找到实习的一点点经验8377
- 7... 二战学校领导,**学校是人 ?阿里子公司不让去实习?7991
- 8... 谢谢ai告诉我,人生或许根本不需要宏大目标6044
- 9... 面试不通过到底问题出在哪儿????4886
- 10... 为什么我怎么选都是错的4871
正在热议
更多
# 面试问题记录 #
71401次浏览 1025人参与
# 上班到公司第一件事做什么? #
40611次浏览 383人参与
# 京东TGT #
53004次浏览 188人参与
# 工作中,你有没有遇到非常爱骂人的领导? #
19986次浏览 142人参与
# 硬件人的简历怎么写 #
257223次浏览 2899人参与
# 求职季如何保持心态不崩 #
106559次浏览 868人参与
# 找工作的破防时刻 #
2096次浏览 40人参与
# 工作时那些社死瞬间 #
25784次浏览 196人参与
# 拼多多工作体验 #
17798次浏览 153人参与
# 互联网行业现在还值得去吗 #
7381次浏览 42人参与
# 技术转行的心路历程 #
48482次浏览 665人参与
# 选完offer后,你后悔学本专业吗 #
38814次浏览 215人参与
# 你觉得技术面多长时间合理? #
87207次浏览 647人参与
# 国企和大厂硬件兄弟怎么选? #
121005次浏览 1656人参与
# 你遇到过哪些神仙同事 #
74998次浏览 663人参与
# 面试经验谈 #
48014次浏览 743人参与
# 安利/避雷我的专业 #
67086次浏览 495人参与
# 米哈游求职进展汇总 #
322790次浏览 2223人参与
# 实习生应该准时下班吗 #
203357次浏览 1323人参与
# 面试吐槽bot #
17974次浏览 104人参与
# 工作一周年分享 #
20120次浏览 111人参与