当前位置: 首页 > news >正文

leetcode 210.课程表II

思路:拓补排序

其实就是对于第一个题的问题变了一个问法,上一个题本质上是求有没有环,这道题本质上就是让你求出来符合没有环的路径输出而已,本质上没有什么区别。

不同就在于这里需要你额外开一个数组用来存储你遍历这个有向图的路径。

注意:并不是说存储返回就完事了,因为所给的数据有可能是不构成拓补排序的要求的,我们需要判断一下这个图是不是有向无环图,如果是,那么拓补排序是可以的;不是的话,我们在存储路径的时候会重复一个环的点,导致输出错误。

这里的判断有没有环其实就是用一个计数器判断是不是符合全部点都遍历,不出现重复的情况下。

上代码:

class Solution {
public:vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {vector<vector<int>>s(numCourses);vector<int>counts(numCourses,0);for(int i=0;i<prerequisites.size();i++){s[prerequisites[i][1]].push_back(prerequisites[i][0]);counts[prerequisites[i][0]]++;}queue<int>q;vector<int>res;int cnt=0;for(int i=0;i<numCourses;i++){if(counts[i]==0){q.push(i);res.push_back(i);}}while(!q.empty()){int tmp=q.front();q.pop();++cnt;for(int i:s[tmp]){if(--counts[i]==0){q.push(i);res.push_back(i);}}}if(cnt==numCourses){return res;}else{return {};}}
};

http://www.lryc.cn/news/354942.html

相关文章:

  • SpringBootTest测试框架五
  • 赛事|基于SprinBoot+vue的CSGO赛事管理系统(源码+数据库+文档)
  • 线性化技巧:绝对值变量的线性化
  • List基本使用(C++)
  • ELK 日志监控平台(一)- 快速搭建
  • 工作中写单片机代码,与学校里有什么不同?
  • Unity LayerMask避坑笔记
  • (原创)从右到左排列RecycleView的数据
  • 【C语言】数据指针地址的取值、赋值、自增操作避坑
  • Java进阶-SpringCloud使用BeanUtil工具类简化对象之间的属性复制和操作
  • 【ES6】ECMAS6新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析
  • 刷题之从前序遍历与中序遍历序列构造二叉树(leetcode)
  • 微信小程序--微信开发者工具使用小技巧(3)
  • JDBC的 PreparedStatement 的用法和解释
  • LeetCode 面试150
  • xmake+xrepo自建仓库添加交叉编译工具链
  • 论文阅读》学习了解自己:一个粗略到精细的个性化对话生成的人物感知训练框架 AAAI 2023
  • [Java EE] 网络编程与通信原理(三):网络编程Socket套接字(TCP协议)
  • MyBatis懒加载数据(大批量数据处理)
  • MySQL--联合索引应用细节应用规范
  • 【spring boot+Lazy ORM+mysql】开发一个数据库管理系统实现对应数据库数据查看和修改
  • 知识分享:隔多久查询一次网贷大数据信用报告比较好?
  • 【Day8:JAVA字符串的学习】
  • jetcache缓存
  • SQLSyntaxErrorException: FUNCTION dbname.to_timestamp does not exist
  • Borel-Cantelli 引理
  • 算法训练营第四十一天 | LeetCode 509 斐波那契数列、LeetCode 70 爬楼梯、LeetCode 746 使用最小花费爬楼梯
  • 网络其他重要协议(DNS、ICMP、NAT)
  • 利用PyCSP3库(含大量全局约束)进行组合约束建模
  • 解决updateByExample时属性值异常的问题(部分属性值没有使用占位符?进行占位,而是变成了属性的名称)