210. 课程表 II

2023-09-22 13:57:02

题目-中等难度

现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。

例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1] 。
返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组 。

示例

示例 1:

输入:numCourses = 2, prerequisites = [[1,0]]
输出:[0,1]
解释:总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。

示例 2:

输入:numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]]
输出:[0,2,1,3]
解释:总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。
因此,一个正确的课程顺序是 [0,1,2,3] 。另一个正确的排序是 [0,2,1,3] 。

示例 3:

输入:numCourses = 1, prerequisites = []
输出:[0]

提示:

  • 1 <= numCourses <= 2000
  • 0 <= prerequisites.length <= numCourses * (numCourses - 1)
  • prerequisites[i].length == 2
  • 0 <= ai, bi < numCourses
  • ai != bi
  • 所有[ai, bi] 互不相同

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1. bfs

时间
44ms
击败 89.86%使用 Python3 的用户
内存
16.93MB
击败 56.86%使用 Python3 的用户

class Solution:
    def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
        # 初始化需要完成的课程
        deg = [0] * numCourses
        # 字典存储课程关联的先决条件
        dic = defaultdict(list)
        # 将需要完成的课程添加到deg, 将完成条件添加到dic键, 关联的值为键上课程完成后可学的课程 
        for ai,bi in prerequisites:
            deg[ai] += 1
            dic[bi].append(ai)
        # li放入未在deg上的课程, 作为可以第一个完成的课程
        li = [i for i,j in enumerate(deg) if j == 0]
        # 列表存储课程
        res = []
        # 当仍然有课程可以完成
        while li:
            # 获取该课程
            a = li.pop(0)
            # 添加到res列表
            res.append(a)
            # 遍历完成课程后完成的后续课程
            for i in dic[a]:
                # 将后续课程在deg中的值-1
                deg[i] -= 1
                # 当课程在deg中值为0, 代表该课程可以标记为已完成课程
                if deg[i] == 0:
                    li.append(i)
        # 如果最终课程数量与给与的课程数量相同, 返回res, 不然为空
        return res if len(res) == numCourses else []
                
更多推荐

Itsycal for Mac: 精美日历软件的魅力之旅

在这个数字化时代,管理时间和日程变得尤为重要。macOS平台上的Itsycal日历软件可以帮助你有效管理你的日程和时间。Itsycal是一款轻量级且直观的日历应用程序,专门为macOS用户设计。通过这款软件,你可以轻松查看、管理和跟踪你的日常活动和重要日期。下面是一些Itsycal为macOS用户带来的独特功能:简洁直

第十章 数据库恢复技术

第十章数据库恢复技术10.1事务的基本概念事务事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。例事务的特性(ACID特性(ACIDproperties))原子性(Atomicity)事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(Consisten

微软在Windows 11推出Copilot,将DALL-E 3集成在Bing!

美东时间9月21日,微软在美国纽约曼哈顿举办产品发布会,生成式AI成为重要主题之一。微软表示,Copilot将于9月26日在Windows11中推出;Microsoft365Copilot将于11月1日向企业客户全面推出;将OpenAI最新的文本生成图片产品DALL.E3集成在Bing和设计平台Designer中等。简

通过实现HandlerInterceptor接口实现一个拦截器

1.简介web应用开发中,拦截器的应用场景非常广泛,主要用于:登陆验证:提取request中请求头携带的token信息;鉴权:判断该用户是否有权限访问某个资源日志记录:记录该handler的入和出性能监控、通用行为等等一些其它的操作。2.spring中使用拦截器的方式spring为我们提供了一个接口:HandlerIn

Python中转换IP地址格式的方法

IP地址一般用字符串“XXX.XXX.XXX.XXX”表示。例如,“192.168.147.1”、“127.0.0.1”等。在确定主机IP地址段时,需要将IP地址的每段转换成数字。1inet_aton()方法该方法的使用方法是socket.inet_aton(ip_string)其中,参数ip_string是字符串类型

GB28181协议-SDP详解

SDP协议SDP全称是SessionDescriptionProtocol,翻译过来就是描述会话的协议。主要用于两个会话实体之间的媒体协商。SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,表示为key=value;SIP负责建立和释放会话,一般来说,会话中包含相关的媒体,比如视频和音频。媒体数据是由SDP描

别问怎么下载,金蝶云星空SaaS BI系统不用下载

国产自研的奥威软件-金蝶云星空SaaSBI,不下载不安装,从浏览器上一键注册登录即可使用:一键点击下载金蝶云星空方案,执行后,BI系统将基于金蝶云星空内的数据与方案自带的BI报表,智能计算分析指标,生成数十张BI数据可视化分析报表。奥威-金蝶云星空SaaSBI是一款强大的在线商业智能工具,它通过和金蝶云星空方案的紧密合

使用docker安装配置oracle 11g

1、安装docker环境。2、开始拉取oracle镜像dockerpullregistry.cn-hangzhou.aliyuncs.com/helowin/oracle\_11g3、下载完成后,查看镜像dockerimages4、启动容器dockerrun-d-p1521:1521--nameoracle11greg

【校招VIP】专业课考点之TCP连接

考点介绍:在TCP/IP中,TCP协议通过三次握手来建立连接,从而提供可靠的连接服务。本专题主要介绍一线互联网大厂面试关于TCP连接的相关问题。专业课考点之TCP连接-相关题目及解析内容可点击文章末尾链接查看!一、考点试题1.TCP是网络传输的常用协议,下面为TCP的描述,哪项是不正确的?A.TCP提供一种面向连接的、

few shot目标检测survey paper笔记(迁移学习)

paper:Few-ShotObjectDetection:AComprehensiveSurvey(CVPR2021)metalearning需要复杂的情景训练,而迁移学习仅需在一个single-branch结构上做两步训练。常用的结构是FasterR-CNN,下面是FasterR-CNN的结构图。RPN的修改当样本

数据结构---单链表

单链表单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象)+指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。如图是一个结点​多个结点加上head(头结点)指针(指向了第一个结点的位置

热文推荐