题目描述:

第一次提交:

class Solution:
def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
indegree = [0 for _ in range(numCourses)]
adj = [[] for _ in range(numCourses)]
for cur,pre in prerequisites:
adj[pre].append(cur)
indegree[cur] += 1
res = []
queue = []
for i in range(numCourses):
if indegree[i] == 0:
queue.append(i)
while queue:
i = queue.pop(0)
res.append(i)
for j in adj[i]:
indegree[j] -= 1
if indegree[j] == 0:
queue.append(j)
return res if len(res) == numCourses else []

方法二:dfs + 栈

class Solution:
def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
def dfs(i, adjacency, flags):
if flags[i] == -1: return True
if flags[i] == 1: return False
flags[i] = 1
for j in adjacency[i]:
if not dfs(j, adjacency, flags): return False
flags[i] = -1
res.append(i)
return True
res = []
adjacency = [[] for _ in range(numCourses)]
flags = [0 for _ in range(numCourses)]
for cur, pre in prerequisites:
adjacency[pre].append(cur)
for i in range(numCourses):
if not dfs(i, adjacency, flags): return []
return res[::-1]

最新文章

  1. java中的String
  2. CountDownLatch如何使用
  3. RaisingStudio.PackageManager 发布 1.0版
  4. JavaWeb学习计划
  5. [iOS微博项目 - 3.0] - 手动刷新微博
  6. python的web压力测试工具-pylot安装使用
  7. javaScript(3)---语法、关键保留字及变量
  8. 推荐一款MongoDB的客户端管理工具--nosqlbooster
  9. vue入门之编译项目
  10. 必会SQL练习题
  11. Python_列表初识及操作
  12. 开源RabbitMQ操作组件
  13. Windbg在应用层调试漏洞时的应用
  14. nginx: [error] invalid PID number “” in “/usr/local/var/run/nginx/nginx.pid”
  15. 双主双写、只备份某些表且要在建表ID自增
  16. 5秒后跳转到另一个页面的js代码
  17. Spark机器学习4·分类模型(spark-shell)
  18. yum安装epel后报错
  19. 九度OJ 1180:对称矩阵 (矩阵计算)
  20. linux 打包 压缩

热门文章

  1. [已解决]报错run `npm audit fix` to fix them, or `npm audit` for details
  2. Aggregate report 聚合报告
  3. Linux 父进程发送信号杀死子进程
  4. session之memcache
  5. PC端写的API接口和手机端APP联合调试
  6. C#常用设计模式
  7. ElementUI的Loading组件 —— 想实现在请求后台数据之前开启Loading组件,请求成功或失败之后,关闭Loading组件
  8. BASS HOME
  9. thinkphp 性能调试
  10. CommandLineToArgvW调EXE传入参数【转载】