210. Course Schedule II

In numCourses courses. You are given an array prerequisites

Return the ordering of courses you should take to finish all courses. If many valid answers, return any.

Note: This reuses the code of Course Schedule, which asks true/false
     Here we just store the courses in the order as well.

def findOrder(numCourses: int, prerequisites: List[List[int]]):
       
    preqCount = defaultdict(int)
    enables = defaultdict(set)
   
    for preq in prerequisites:
        a, b = preq
        preqCount[a] = preqCount[a] + 1
        enables[b].add(a)
       
    active = []    completed = 0

    for i in range(numCourses):
        if i not in preqCount:
            active.append(i)
            completed += 1
   
    res = []
    while active:            
        c = active.pop()
        res.append(c)
        if c in enables:
            for e in enables[c]:
                preqCount[e] = preqCount[e] - 1
                if not preqCount[e]:
                    completed += 1
                    active.append(e)
    return res if completed == numCourses else []

Comments

Popular posts from this blog

849. Maximize Distance to Closest Person

347. Top K Frequent Elements

139. Word Break