LeetCode[210]课程表II

news2024/11/28 19:00:38

难度:Medium

题目:

现在你总共有 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] 互不相同

Related Topics

  • 深度优先搜索
  • 广度优先搜索
  • 拓扑排序


重点!!!解题思路

第一步: 

明确解题手段:此题和LeetCode[207]差不多 解题手段几近相同

                         LeetCode[207]课程表

第二步:

此题与LeetCode[207]题不同的是,上一题是求能否可能完成学习,此题求的是完成题的顺序,在上一题中,我们本来就是按照学习顺序来判断能否完成的学习,所以此题就将上一题统计的学习顺序给统计起来即是答案。

源码+讲解:

class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        int[] indeg=new int[numCourses];
        List<List<Integer>> g=new ArrayList<>();
        for (int i=0;i<numCourses;i++){
            g.add(new ArrayList<>());
        }
        for (int[] prerequisite : prerequisites) {
            indeg[prerequisite[0]]++;
            g.get(prerequisite[1]).add(prerequisite[0]);
        }
        Queue<Integer> queue=new ArrayDeque<>();
        for (int i=0;i<indeg.length;i++){
            if(indeg[i]==0) queue.offer(i);
        }
        //以上细致讲解请参考上一题
        List<Integer> res=new ArrayList<>();
        while (!queue.isEmpty()){
            int pre = queue.poll();
            res.add(pre);  //统计出队顺序即是res
            for (Integer cur : g.get(pre)) {
                if (--indeg[cur]==0) queue.offer(cur);
            }
        }
        if (res.size()-numCourses!=0) res.clear();  //应题目要求,无答案时返回空结果
        return res.stream().mapToInt(i->i).toArray();  //集合转数组操作
    }
}

 运行结果:

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。

系列持续更新中,点个订阅吧,喜欢练习算法那就点个攒吧 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/843658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8.7面经

1.字符串是怎么实现不可变的&#xff0c;不可变类&#xff0c;字符串不可变的好处 &#xff08;1&#xff09;保存字符串的数组被 final 修饰且为私有的&#xff0c;并且String 类没有提供/暴露修改这个字符串的方法。 (2)String 类被 final 修饰导致其不能被继承&#xff0c…

2023上半年京东烘干机行业品牌销售排行榜(京东商品数据)

随着人们消费水平的提高&#xff0c;追求健康品质消费的用户越来越多&#xff0c;这样的消费升级为市场的发展带来很大的动力。同时&#xff0c;随着洗衣机市场趋向饱和&#xff0c;增长趋于平缓&#xff0c;更新换代和结构升级成为行业的主旋律。 在这一市场背景下&#xff0…

【VUE】项目本地开启https访问模式(vite4)

在实际开发中&#xff0c;有时候需要项目以https形式进行页面访问/调试&#xff0c;下面介绍下非vue-cli创建的vue项目如何开启https 环境 vue: ^3.2.47vite: ^4.1.4 根据官方文档&#xff1a;开发服务器选项 | Vite 官方中文文档 ps&#xff1a;首次操作&#xff0c;不要被类…

Crond计划任务和用户权限提升(三十七)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、一次性任务 二、周期性任务 ​编辑 三、用户权限提升 3.1 su 3.2 sudo提权 总结 前言 计划任务是在指定的时间间隔内自动执行的任务。在Linux系统中&#xff…

开源项目如何贡献代码

以腾讯犀牛鸟开源项目ncnn为例 目录 fork项目仓库 添加远程仓库 同步更新仓库 贡献代码提交新PR PR未merge更新PR fork项目仓库 只需要做一次 到仓库页面点击fork&#xff0c;然后create forkTencent/ncnn: ncnn is a high-performance neural network inference frame…

Grafana 曲线图报错“parse_exception: Encountered...”

问题现象 配置的Grafana图报错如下&#xff1a; 原因分析 点开报错&#xff0c;可以看到报错详细信息&#xff0c;是查询语句的语法出现了异常。 变量pool的取值为None 解决方案 需要修改变量pool的查询SQL&#xff0c;修改效果如下&#xff1a; 修改后&#x…

Gym 0.26.2版本简明教程【1】

Gym 0.26.2版本简明教程【1】 文章目录 Gym 0.26.2版本简明教程【1】1. 构建gym环境2. gym.Env常用method3. 关于 gym 0.26.2新版本的更改4. Reference 1. 构建gym环境 使用gym.make(id,render_mode)我们可以注册一个环境&#xff0c;然后我们可以查看一下这个环境的一些信息&…

自动化处理,web自动化测试处理多窗口+切换iframe框架页总结(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 web 自动化之处理…

TVS二极管能替代稳压二极管吗?有什么区别?

经常有应用工程师询问&#xff1a;TVS二极管能否替代替换稳压二极管&#xff1f;接下来&#xff0c;TVS厂家东我电子针对TVS二极管和稳压二极管这个话题&#xff0c;详细讲解下这两者的相同点和不同点。 TVS二极管英文名是&#xff1a;Transient voltage suppression diode&am…

3.01 用户在确认订单页收货地址操作

用户在确认订单页面&#xff0c;可以针对收货地址做如下操作&#xff1a; 1. 查询用户的所有收货地址列表 2. 新增收货地址 3. 删除收货地址 4. 修改收货地址 5. 设置默认地址步骤1&#xff1a;创建对应用户地址BO public class AddressBO {private String addressId;private…

.NET SqlSuger 简单介绍,超快开发数据库

文章目录 前言SqlSugar使用我的环境Nuget 安装新建连接串DB First 和 Code First使用增删改查 总结 前言 我之前介绍过EFCore 怎么使用Nuget快速创建数据库&#xff0c;我之后发现SqlSugar更快。这里简单再说一下SqlSugar如何使用 .NET Core 数据库DB First自动生成&#xff0…

3.核心抽象

3.1 环境对象 StreamExecutionEnvironment是Flink应用开发时的概念&#xff0c;表示流计算作业的执行环境&#xff0c;是作业开发的入口、数据源接口、生成和转换DataStream的接口、数据Sink的接口、作业配置接口、作业启动执行的入口。Environment 是 运 行 时 作 业 级 别 的…

如何使用自己域名进行远程访问内网群晖NAS 6.X

使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 文章目录 使用自己的域名远程访问内网群晖NAS 6.X【内网穿透】 在之前的文章中&#xff0c;我们向大家演示了如何使用cpolar&#xff0c;创建一条固定的、能够在公共互联网登录内网群晖NAS的数据隧道。这条隧道已经能够应对…

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用

TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度&#xff0c;减少内存占用 TextBrewer是一个基于PyTorch的、为实现NLP中的知识蒸馏任务而设计的工具包&#xff0c; 融合并改进了NLP和CV中的多种知识蒸馏技术&#xff0…

Bean基本注解开发和Bean依赖注入注解开发

目录 1.Bean基本注解开发 Component Scorelazy PostConstruct和PreDestroy RepositoryServiceController 2.Bean依赖注入注解开发 Value Autowired Qualifier Resource 扩展AutoWired 1.Bean基本注解开发 基本Bean注解&#xff0c;主要是使用注释的方式替代原有xml的…

记录--说一说css的font-size: 0

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 平常我们说的font-size&#xff1a;0&#xff1b;就是设置字体大小为0对吧&#xff0c;但是它的用处不仅仅如此哦&#xff0c;它还可以消除子行内元素间额外多余的空白&#xff01; 问题描述&#xff…

Android前沿技术?Jetpack如何?

Jetpack Compose是Android开发领域的一项前沿技术&#xff0c;它提供了一种全新的方式来构建用户界面。近年来&#xff0c;Jetpack Compose在各大招聘等网站上的招聘岗位逐渐增多&#xff0c;薪资待遇也相应提高。本文将从招聘岗位的薪资与技术要求入手&#xff0c;分析Jetpack…

《Java-SE-第三十章》之哲学家就餐问题

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

mongodb-win32-x86_64-2008plus-3.4.24-signed.msi

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.4\binC:\MongoDB\Server\3.4\bin>C:\MongoDB\Server\3.4\bin>mongod --help Options:General options:-h [ --help ] …

窥探系列之Mybatis-plus XML分页查询

mybatisPlus分页查询原理 searchCount字段控制是否查询总记录数 com.baomidou.mybatisplus.plugins.PaginationInterceptor 该插件拦截sql&#xff0c;如果searchCounttrue&#xff0c;则使用sql解析包jsqlparser根据原sql生成count语句&#xff0c;另外关键