210. Course Schedule II

class Solution(object):
    def findOrder(self, numCourses, prerequisites):
        pre = [[] for _ in range(numCourses)]
        inEdge = [0] * numCourses

        for course, prereq in prerequisites:
            pre[prereq].append(course)
            inEdge[course] += 1


        que = deque()
        res = []

        for i in range(numCourses):
            if inEdge[i] == 0:
                que.append(i)


        while que:
            node = que.popleft()
            res.append(node)
            for n in pre[node]:
                inEdge[n] -= 1
                if inEdge[n] == 0:
                    que.append(n)

        return res if len(res) == numCourses else []