LeetCode 207. 课程表

2022-09-02  本文已影响0人  草莓桃子酪酪
题目

你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。

例:
输入:numCourses = 2, prerequisites = [[1,0]]
输出:true
解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。

方法:拓扑排序
class Solution(object):
    def canFinish(self, numCourses, prerequisites):
        from collections import deque

        inDegree = [0] * numCourses
        relationDict = collections.defaultdict(list)

        for course in prerequisites:
            inDegree[course[0]] += 1
            relationDict[course[1]].append(course[0])
        
        queue = deque()
        for i in range(len(inDegree)):
            if inDegree[i] == 0:
                queue.append(i)
        
        while queue:
            current = queue.popleft()
            numCourses -= 1
            relation = relationDict[current]
            if relation:
                for course in relation:
                    inDegree[course] -= 1
                    if inDegree[course] == 0:
                        queue.append(course)
        
        return numCourses == 0
相关知识
参考

代码相关:https://leetcode.cn/problems/course-schedule/solution/bao-mu-shi-ti-jie-shou-ba-shou-da-tong-tuo-bu-pai-/
deque:https://www.cnblogs.com/ranzhong/p/12438841.html

上一篇 下一篇

猜你喜欢

热点阅读