Kahn's algorithm collecting the topological order.
function findOrder(numCourses, prerequisites): graph = [[] for _ in range(numCourses)] inDegree = [0] * numCourses for a, b in prerequisites: graph[b].append(a) inDegree[a] += 1 queue = [i for i in range(numCourses) if inDegree[i] == 0] result = [] while queue: course = queue.pop(0) result.append(course) for neighbor in graph[course]: inDegree[neighbor] -= 1 if inDegree[neighbor] == 0: queue.append(neighbor) return result if len(result) == numCourses else []
time and space.