数据结构与算法:第13周作业2:210课程表

题目描述

在这里插入图片描述
链接:https://leetcode-cn.com/problems/course-schedule-ii/

代码:

class Solution:
    def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
        # 一个字典用来记录图中每个节点的后续节点
        # 一个字典用来记录当前节点的入度数
        res = []
        if numCourses == 1:return [0]
        next_node = defaultdict(list) #查询不存在的键值,返回默认值[]
        rudu_num = defaultdict(int)   #查询不存在的键值,返回默认值0
                for node in prerequisites:
            next_node[node[0]].append(node[1])
            # print(next_node) test测试
            rudu_num[node[1]] += 1
            # print(rudu_num) test测试
        # print(rudu_num[0])
        # print(next_node[5])
        # print(next_node1[0])
        # print(next_node2[0])
        start = 0
        finish = 0
        
        while start < numCourses:
            # 如果当前节点入度为0,将该节点和相应邻边去掉,即将该节点的后续节点的入度数分别减1
            if rudu_num[start] == 0: #rudu_num[start]返回默认值并插入
                for node in next_node[start]:
                    rudu_num[node] -= 1
                    # print(rudu_num)
                res.append(start)
                rudu_num[start] = -1 #相当于把该节点去掉
                start = 0 #重置start,再遍历一次rudu_num
                finish += 1 #去掉节点之后,完成一步
                continue
            if finish == numCourses: #当所有节点去掉之后,finish可以达到所有课程,就代表无环
                res.reverse() #这里因为我做的是从原始节点开始删除的,所以顺序颠倒了,用reverse函数换一下就可以了
                return res
            start += 1
        return []

参考:https://leetcode-cn.com/problems/course-schedule-ii/solution/ru-du-tuo-bu-pai-xu-sui-ran-la-ji-dan-gan-jue-hen-/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值