207. Course Schedule

There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1For example, the pair [0, 1], indicates that to take course 0 you have to first take course 1.

Return true if you can finish all courses. Otherwise, return false.

Note: preqCount doesn't need to hold courses, just count

def canFinish(self, numCourses: int, prerequisites: List[List[int]]):        
    preqCount = {} enables = {}
   
    for preq in prerequisites:
        a, b = preq
        if a not in preqCount:
            preqCount[a] = 0
        preqCount[a] = preqCount[a] + 1
        if b not in enables:
            enables[b] = set()
        enables[b].add(a)
       
    active = [] completed = 0

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

Comments

Popular posts from this blog

849. Maximize Distance to Closest Person

347. Top K Frequent Elements

139. Word Break