课程表 II:拓扑i排序

news/2024/12/29 14:31:32/

Problem: 210. 课程表 II

文章目录

  • 思路
  • 解题方法
    • 1:首先新建一个inDegree数组用来存放所有的点的入度:`int[] inDegree = new int[numCourses];`
    • 2:然后遍历所有子数组将所有点及其入度存进去,这道题就是课程号本身为坐标,对应的值就是入度的数量:
    • 3:然后就是新建一个队列用来一个一个存放入度为0的点,下面这个代码其实作用就是第一次将一开始入度为0的点先存进去:
    • 4:只要队列不为空,我们就一直循环下去,先去出队列里面的元素放入结果数组中,然后删掉这个元素的指出去的边:
  • 复杂度
  • Code

思路

首先这道题是一道经典的拓扑排序题目,那么什么是拓扑排序呢?举例说明:

请添加图片描述
在上图中,左边这个图我们首先一个一个点的去判断他们的入度是多少,从左到右就是 (0:0),(1:1),(2:1),(3:2),然后我们先找到入度为0的点接下来删除掉这个点以及他指出去的边,然后重复这个过程,一个一个输出那些入度为0的点,这个图最终的拓扑排序就是:0,1,2,3或者0,2,1,3这样,那么知道了拓扑排序再来看这道题就很简单了

解题方法

 for(int[] edges :prerequisites){inDegree[edges[0]]++;}
  • 3:然后就是新建一个队列用来一个一个存放入度为0的点,下面这个代码其实作用就是第一次将一开始入度为0的点先存进去:

        Deque<Integer> q = new LinkedList();for(int i = 0;i<inDegree.length;i++){if(inDegree[i]==0){q.offer(i);}}
  • 4:只要队列不为空,我们就一直循环下去,先去出队列里面的元素放入结果数组中,然后删掉这个元素的指出去的边:

  int[] res = new int[numCourses];int index = 0;while(!q.isEmpty()){int node = q.poll();res[index++] = node;for(int[] edges : prerequisites){if(edges[1]==node){inDegree[edges[0]]--;if(inDegree[edges[0]]==0){q.offer(edges[0]);}}}}

复杂度

  • 时间复杂度:

添加时间复杂度, 示例: O ( n ) O(n) O(n)

  • 空间复杂度:

添加空间复杂度, 示例: O ( n ) O(n) O(n)

Code


class Solution {public int[] findOrder(int numCourses, int[][] prerequisites) {int[] inDegree = new int[numCourses];for(int[] edges :prerequisites){inDegree[edges[0]]++;}Deque<Integer> q = new LinkedList();for(int i = 0;i<inDegree.length;i++){if(inDegree[i]==0){q.offer(i);}}int[] res = new int[numCourses];int index = 0;while(!q.isEmpty()){int node = q.poll();res[index++] = node;for(int[] edges : prerequisites){if(edges[1]==node){inDegree[edges[0]]--;if(inDegree[edges[0]]==0){q.offer(edges[0]);}}}}return index == numCourses? res:new int[0];}
}

http://www.ppmy.cn/news/91362.html

相关文章

自动化测试框架、Python面向对象以及POM设计模型简介

目录 1 自动化测试框架概述 2 自动化测试框架需要的环境 3 自动化测试框架设计思想&#xff1a;Python面向对象 4 自动化测试框架设计思想&#xff1a;POM&#xff08;Page Object Model&#xff09;页面对象模型 1 自动化测试框架概述 所谓的框架其实就是一个解决问题…

一体集成的 API 调试工具,居然才听说?

在 Eolink ApiKit之前&#xff0c;定义 API 用 Swagger&#xff0c;生成文档用 YAPI&#xff0c;前端自测用 Mock&#xff0c;接口测试用 Postman&#xff0c;性能测试用 JMeter。 有了 Eolink ApiKit之 之后&#xff0c;Apikit Postman Swagger Mock JMeter&#xff0c;团…

英语学习:D开头

dad 爸爸 daily 每天&#xff0c;每日的&#xff0c;日报 dam 水坝 damage 毁坏&#xff0c;损坏 damp 潮湿的 dance 跳舞 danger 危险 dangerous 危险的 dare 敢&#xff0c;敢于 dark 黑暗&#xff1b;日暮&#xff1b;深色的 darkness 黑暗&#xff0c;阴暗 dash…

网络编程套接字基本概念认识

目录 认识端口号 认识TCP协议 认识UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 认识端口号 端口号(port)是传输层协议的内容 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 …

优雅处理HTTP请求:过滤器、拦截器、ControllerAdvice和自定义AOP

我们在开发Spring Boot应用程序时&#xff0c;经常会遇到需要对HTTP请求进行一些处理的情况&#xff0c;例如鉴权、数据校验、请求日志记录等等。在处理HTTP请求时&#xff0c;我们可以使用四种不同的技术来实现这些功能&#xff1a;过滤器、拦截器、ControllerAdvice和自定义A…

使用Makefile笔记总结

文章目录 一、简单了解Makefile1.1 Makefile示例1.2 基本规则1.3 make是如何工作的1.4 使用变量1.5 make自动推导 二、变量2.1 变量的定义和引用2.2 变量的两种高级用法2.3 override 和 define 关键字2.4 环境变量与目标变量2.5 自动变量 三、Makefile规则3.1 通配符3.2 目标依…

电脑不小心点了网络重置之后连不上任何网包括热点的解决方法

直接参考这个博客&#xff1a; 先用别人的电脑下一个ccleaner到U盘上&#xff0c;然后插到自己电脑上安装&#xff0c;然后安装下面这个博客一波操作&#xff0c;最后重启即可。 笔记本不小心网络重置后&#xff0c;不能上网&#xff0c;网络适配器存在感叹号_吉星J_x的博客-…

数据结构与算法—排序算法篇

目录 1、选择排序 1.1、算法思想 1.2、步骤 1.3、算法实现 1.4、算法分析 2、 冒泡排序 2.1、算法思想 2.2、算法实现 2.3、算法分析 2.4、改进冒泡排序 3、插入排序 3.1、算法思想 3.2、算法实现 3.3、算法分析 4、希尔排序 4.1、算法思想 4.2、增长量选定规…