【力扣每日一题】2023.9.10 课程表Ⅱ

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

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

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

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

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

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

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

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

代码:

class Solution {
public:unordered_map<int,vector<int>>m;vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {for(auto& p:prerequisites){         //构建有向图 if(m.find(p[0])==m.end()) m[p[0]]=vector<int>(0);m[p[0]].push_back(p[1]);}vector<int>res;     unordered_set<int>s;    //用于统计已经学习的课程int last=0;             //记录上一轮的学习课程数while(res.size()!=numCourses){for(int i=0;i<numCourses;i++){      //遍历所有课程  if(s.count(i)==0){              //如果没学过课程那么进入判断bool flag=true;for(int c:m[i]){           if(s.count(c)==0){flag=false;break;}}if(flag){                   //如果本课程的所有先修课都学过,那么添加进答案res.push_back(i);s.insert(i);}}}//如果本轮学习过后,学习课程和上一轮一样,那么我们无法学完所有课程,返回空if(last==res.size()) return vector<int>(0);last=res.size();}return res;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精品基于SpringCloud实现的电影院购票系统设计-微服务-分布式

《[含文档PPT源码等]精品基于SpringCloud实现的电影院购票系统设计的设计与实现-微服务-分布式》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;springcloud JDK版…

计算机网络中的应用层和传输层(http/tcp)

目录 1、协议的通俗理解 1.1 理解协议 2.应用层 2.1 http协议 2.2 HTTP的方法 2.3 HTTP的状态码 2.4 HTTP常见Header 3、传输层 3.1 端口号 3.1.1 端口号范围划分 3.1.2 netstat 3.1.3 认识知名端口号(Well-Know Port Number) 3.2 UDP协议 3.2.1 UDP协议端格式 3…

[开学季]ChatPaper全流程教程

文章目录 1. 粗筛&#xff1a;论文全文总结1.1 使用步骤&#xff1a; 1.2 功能描述&#xff1a;2. 论文问答&#xff1a;2. 精读&#xff1a;学术版GPT的论文翻译2.0 论文精读的正确姿势2.1 使用场景1&#xff1a;arxiv论文完美翻译2.2 本地PDF全文翻译&#xff1a;2.3 关于免费…

【数据结构】线性表的知识点全面总结

目录 1.线性表的顺序表示 1.1顺序表的基本概念 1.2顺序表的基本操作 1.2.1插入 1.2.2删除 1.2.3查找 2.线性表的链式表示 2.1单链表 单链表的基本概念 2.1.1基本操作 2.1.1.1单链表的建立 2.1.1.2插入 2.1.1.3删除 2.1.1.4查找 2.2双链表 2.2.1基本操作 2.2.1.1插入 2.2.…

计算机专业毕业设计项目推荐03-Wiki系统设计与实现(JavaSpring+Vue+Mysql)

Wiki系统设计与实现&#xff08;JavaSpringVueMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设…

使用PHPStudy在本地快速建立网站并实现局域网外访问(无公网IP)

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

datagrip 相关数据连接信息无缝迁移

背景 因为公司换电脑了&#xff0c;接触的项目比较多&#xff0c;不同项目&#xff0c;不同环境的数据库连接有好几十个&#xff0c;如果在新电脑上挨个重新连接一遍劳心劳力&#xff0c;所以想看一下能不能直接将之前保存的连接信息直接迁移到新的电脑上面。 为此&#xff0c…

探索GreatADM:如何快速定义监控

引文 在数据库运维过程中&#xff0c;所使用的运维管理平台是否存在这样的问题&#xff1a; 1、默认监控粒度不够,业务需要更细颗粒度的监控数据。2、平台默认的监控命令不适合,需要调整阈值量身定制监控策略。3、不同类型的实例或组件需要有不同的监控重点,但管理平台监控固…

界面组件DevExpress WinForms v23.1 - 增强的图表、甘特图功能

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

《Python入门到精通》time模块详解,Python time标准库,time库函数大全

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 time模块详解 1、获取操作time.time() 获取时间戳(float)time.time_ns() 获取时间戳(int)time.thread_time()…

VIT中的einops包详解

‘’‘einops有三个常用方法&#xff1a;rearrange,repeat,reduce’‘’ rearrange的操作相当于转置 rearrange(image,‘h w c -> w h c’) 高和宽转置 path ../data/cat_and_mouse.jpg image cv2.imread(path) h,w,c image.shape # shape第一个值是h,第二个是w image…

电子电路学习笔记之NCV84120DR2G——车规级单通道高压侧驱动器

关于车规级芯片&#xff1a; 关于车规级芯片&#xff08;Automotive Grade Chip&#xff09;&#xff0c;车规级芯片是专门用于汽车行业的芯片&#xff0c;具有高可靠性、高稳定性和低功耗等特点&#xff0c;以满足汽车电子系统的严格要求。这些芯片通常用于车载电子控制单元&…

【java】【SSM框架系列】【一】Spring

目录 一、简介 1.1 为什么学 1.2 学什么 1.3 怎么学 1.4 初识Spring 1.5 Spring发展史 1.6 Spring Framework系统架构图 1.7 Spring Framework学习线路 二、核心概念&#xff08;IoC/DI&#xff0c;IoC容器&#xff0c;Bean&#xff09; 2.1 概念 2.2 IoC入门案例 …

十五、Webpack打包图片-js-Vue、Label命令、resolve模块解析

一、webpack打包图片 &#xff08;1&#xff09;加载图片案例准备 为了演示我们项目中可以加载图片&#xff0c;我们需要在项目中使用图片&#xff0c;比较常见的使用图片的方式是两种&#xff1a; img元素&#xff0c;设置src属性&#xff1b;其他元素&#xff08;比如div&…

IP175D参考资料和引脚图

特性 宽工作温度范围IP175DLF(0C至70C) IP175DLFI (-40C至85C)内置6个MAC和5个PHY 每个端口可配置为10base-t、100Base-TX 最多2K个MAC地址 支持自极性10Mbps 广播风暴防护 汽车MDI-MDIX 支持3个MIL/RMII接口Layer2-4多字段分类器支持8-MultiField输入支持交通政策支持…

React 全栈体系(四)

第二章 React面向组件编程 六、组件的生命周期 1. 效果 需求:定义组件实现以下功能&#xff1a; 让指定的文本做显示 / 隐藏的渐变动画从完全可见&#xff0c;到彻底消失&#xff0c;耗时2S点击“不活了”按钮从界面中卸载组件 <!DOCTYPE html> <html lang"e…

特殊矩阵的压缩存储(对称矩阵,三角矩阵和三对角矩阵)

目录 1.对阵矩阵 2.三角矩阵 3.三对角矩阵&#xff08;带状矩阵&#xff09; 均假设数组的下标从0开始 1.对阵矩阵 定义&#xff1a;若对一个n阶矩阵A中的任意一个元素 aᵢ,ⱼ 都有aᵢ,ⱼaⱼ,ᵢ &#xff08;1≤i,j≤n&#xff09;&#xff0c;则称其为对称矩阵。 存储策略…

⛳ MVCC 原理详解

&#x1f38d;目录 ⛳ MVCC 原理详解&#x1f43e; 一、事务回顾&#x1f4d0; 1.1、什么是数据库事务&#xff0c;为什么要有事务&#x1f389; 1.2、事务包括哪几个特性&#xff1f;&#x1f38d; 1.3、事务并发存在的问题1.3.1、脏读1.3.2、不可重复读1.3.3、幻读 &#x1f…

Android Jetpack 中Hilt的使用

Hilt 是 Android 的依赖项注入库&#xff0c;可减少在项目中执行手动依赖项注入的样板代码。执行 手动依赖项注入 要求您手动构造每个类及其依赖项&#xff0c;并借助容器重复使用和管理依赖项。 Hilt 通过为项目中的每个 Android 类提供容器并自动管理其生命周期&#xff0c;…

依赖项的处理与层的创建与注册

依赖项的处理与层的创建与注册 依赖项的处理与层的创建与注册 新问题什么是 layer?layer 的创建与注册 与函数同时创建和绑定单独上传 layer 再绑定函数(推荐) 真正的运行时依赖 注册包的约定与平台强关联的运行时 1. 云端安装依赖2. 本地构建 Amazon Linux 2 容器环境3. 利用…