码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【力扣每日一题】2023.9.10 课程表Ⅱ


    目录

    题目:

    示例:

    分析:

    代码:


    题目:

    示例:

    分析:

    今天的题目和昨天类似,不过今天要我们求出学习所有课程的先后顺序。

    昨天只需要我们求出能否学习完所有课程,因此我们只需要判断构建出的有向图中是否有环即可,而今天的题我们就不能简单判断有没有环了。

    要返回学习课程的先后顺序,最简单最直接的方法就是模拟。

    我们跟昨天一样,首先先把有向图构建出,接着我们再模拟学习,模拟之前我们还需要拿一个数组来存放学习课程的顺序,以及一个set来记录学过的课程,其实数组和set里的元素是一致的,不过set更方便统计set中是否含有某个元素。

    每次学习我们都把所有课程遍历一遍,如果课程我们没有学过(不在set里),我们就遍历这门课程的先修课程,如果它的先修课程全部都在set中,那么我们本轮学习就可以学这门课程,把它添加进答案数组以及set中。

    课程遍历完毕之后,我们还需要做一个判断,如果本轮学习没有学习到任何课程,那么就表示我们无法学习到所有的课程(图中有环),返回空数组即可。

    一直重复上述模拟学习的过程,直到答案数组的长度等于课程数目了,就表示我们学习完了所有的课程,这时退出循环,返回答案数组即可。

    代码:

    1. class Solution {
    2. public:
    3. unordered_map<int,vector<int>>m;
    4. vector<int> findOrder(int numCourses, vectorint>>& prerequisites) {
    5. for(auto& p:prerequisites){ //构建有向图
    6. if(m.find(p[0])==m.end()) m[p[0]]=vector<int>(0);
    7. m[p[0]].push_back(p[1]);
    8. }
    9. vector<int>res;
    10. unordered_set<int>s; //用于统计已经学习的课程
    11. int last=0; //记录上一轮的学习课程数
    12. while(res.size()!=numCourses){
    13. for(int i=0;i//遍历所有课程
    14. if(s.count(i)==0){ //如果没学过课程那么进入判断
    15. bool flag=true;
    16. for(int c:m[i]){
    17. if(s.count(c)==0){
    18. flag=false;
    19. break;
    20. }
    21. }
    22. if(flag){ //如果本课程的所有先修课都学过,那么添加进答案
    23. res.push_back(i);
    24. s.insert(i);
    25. }
    26. }
    27. }
    28. //如果本轮学习过后,学习课程和上一轮一样,那么我们无法学完所有课程,返回空
    29. if(last==res.size()) return vector<int>(0);
    30. last=res.size();
    31. }
    32. return res;
    33. }
    34. };

  • 相关阅读:
    SQL Server Not Null约束
    工作中怎么去进行测试用例的编写
    秋招每日一题T31——二叉搜索子树的最大键值和
    Singleton Pattern 单例模式简介与 C# 示例【创建型】【设计模式来了】
    Android学习-加载网络图片、沉浸式状态栏
    智能运维应用之道,告别企业数字化转型危机
    【机器学习】红酒数据集和加利福尼亚的房价数据的随机森林算法详解
    分布式开发漫谈
    欧奈尔RPS曲线的编制方法这次终于成功了
    sklearn基础篇(七)-- 随机森林(Random forest)
  • 原文地址:https://blog.csdn.net/m0_63235356/article/details/132784370
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号