美文网首页
LeetCode 207. 课程表

LeetCode 207. 课程表

作者: 草莓桃子酪酪 | 来源:发表于2022-09-02 04:37 被阅读0次
    题目

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

    • 例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。
      请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。

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

    方法:拓扑排序
    • inDegree 存储每门课的入度,初始化为零; relationDict 以字典的形式记录每门课的后续课程,key 表示课程,value 表示该课程的后续课程,用 list 表示
    • 循环遍历 prerequisites
      • 计算每门课的入度
      • 记录课与课间的关系
    • queue 为双向队列,存储当前入度为零的课程
    • 循环遍历 inDegree,将入度为零的课程放入队列 queue
    • 循环直至队列为空
      • current 存储当前课程,通过将双向队列的最左输出得到
      • 选修当前课程 current,那么选修课程数量 numCourses 减一
      • 获取当前选修课程 current 的关系,即该课程的后继课程
      • 若存在后继课程,那么将其所有的后继课程的入度减一,并判断此时的入度是否为零,若为零,表示该课程已可以被选修,将其加入队列 queue
    • 若所有课程已被选修,即 numCourses 为零,那么返回 True;否则,返回 False
    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
    
    相关知识
    • 双向队列: collections.deque()
    参考

    代码相关: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

    相关文章

      网友评论

          本文标题:LeetCode 207. 课程表

          本文链接:https://www.haomeiwen.com/subject/pdctnrtx.html