课程表二

#题目内容
现在你总共有 n 门课需要选,记为0到n-1。
在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:【0,1】
给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。
#解题思路
其实和上篇课程表的blog相差不大,只是需要一个数组将出队列的课程储存即可,最后判断numcourse是否等于0,返回该数组或者【】

from collections import deque
class Solution:
    def findOrder(self, numCourses: int, prerequisites: 
    List[List[int]]) -> List[int]:        
    target = []        
    indegrees = [0 for i in range(numCourses)]        
    adlist = [[] for i in range(numCourses)]        
    res = deque()        
    for cur,pre in prerequisites:            
        indegrees[cur] += 1            
        adlist[pre].append(cur)
    for i in range(numCourses):            
        if indegrees[i] == 0:                
            res.append(i)        
    while res:            
        pre = res.popleft()            
        numCourses -= 1            
        target.append(pre)            
        for cur in adlist[pre]:                
            indegrees[cur] -= 1                
            if indegrees[cur] == 0:                    
                res.append(cur)        
    if numCourses == 0:            
        return target        
    else:            
        return []
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值