关注
第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
相关推荐
点赞 评论 收藏
分享


点赞 评论 收藏
分享
09-30 12:16
门头沟学院 前端工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 发面经攒人品 #
2702983次浏览 36661人参与
# 产品实习,你更倾向大公司or小公司 #
175925次浏览 1996人参与
# 智慧芽求职进展汇总 #
7053次浏览 22人参与
# 26届秋招公司红黑榜 #
2308次浏览 4人参与
# 一汽大众工作体验 #
11806次浏览 23人参与
# 最难的技术面是哪家公司? #
53304次浏览 882人参与
# 平安产险科技校招 #
1894次浏览 0人参与
# 机械人的工作环境真的很差吗 #
23782次浏览 117人参与
# 你认为小厂实习有用吗? #
93006次浏览 604人参与
# 入职第一天,你准备什么时候下班 #
83748次浏览 457人参与
# 参加完秋招的机械人,还参加春招吗? #
67416次浏览 596人参与
# 经纬恒润求职进展汇总 #
135993次浏览 1060人参与
# 度小满求职进展汇总 #
7477次浏览 40人参与
# 你有哪些缓解焦虑的方法? #
36369次浏览 831人参与
# 秋招想进国企该如何准备 #
96926次浏览 483人参与
# 来聊聊机械薪资天花板是哪家 #
146142次浏览 804人参与
# 饿了么求职进展汇总 #
76835次浏览 682人参与
# 我对___祛魅了 #
134352次浏览 743人参与
# 职场捅娄子大赛 #
429224次浏览 4161人参与
# 关于提前批我想问 #
242577次浏览 2284人参与
# 机械人的薪资开到多少,才适合去? #
134807次浏览 489人参与
# 我的求职进度条 #
132144次浏览 1523人参与