#题目内容
现在你总共有 n 门课需要选,记为0到n-1。
在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:【0,1】
给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。
#解题思路
其实和上篇课程表的blog相差不大,只是需要一个数组将出队列的课程储存即可,最后判断numcourse是否等于0,返回该数组或者【】
from collections import deque
class Solution:
def findOrder(self, numCourses: int, prerequisites:
List[List[int]]) -> List[int]:
target = []
indegrees = [0 for i in range(numCourses)]
adlist = [[] for i in range(numCourses)]
res = deque()
for cur,pre in prerequisites:
indegrees[cur] += 1
adlist[pre].append(cur)
for i in range(numCourses):
if indegrees[i] == 0:
res.append(i)
while res:
pre = res.popleft()
numCourses -= 1
target.append(pre)
for cur in adlist[pre]:
indegrees[cur] -= 1
if indegrees[cur] == 0:
res.append(cur)
if numCourses == 0:
return target
else:
return []