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

news2024/12/26 0:46:39

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

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

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

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

我们跟昨天一样,首先先把有向图构建出,接着我们再模拟学习,模拟之前我们还需要拿一个数组来存放学习课程的顺序,以及一个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.coloradmin.cn/o/995331.html

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

相关文章

MIT6.828实验记录-Lab2

实验1完成了内核启动的相关操作&#xff0c;由实验1可知&#xff0c;首先BIOS&#xff08;0xf0000~0x10000064KB&#xff09;将Boot Loader加载到0x7c00~0x7dff&#xff08;512B&#xff09;处&#xff0c;Boot Loader代码执行后将内核代码的ELF文件读取到&#xff10;x100000其…

静态工厂模式,抽象工厂模式,建造者模式

静态工厂模式 ublic class FruitFactory {public static Fruit getFruit(String name) {Fruit fnull;switch (name){case "APPLE":{fnew Apple();}case "BANANA":{fnew Banana();}default :{System.out.println("Unknown Fruit");}}return f;} …

基于Fomantic UI Web构建 个人导航站点网站源码 网站技术导航源码

BYR-Navi-master好看有个性的网站技术导航源码 该网站基于Fomantic UI Web框架构建&#xff0c;整个项目的设计和构建具有高度的配置和定制灵活性。 整体风格比较适合个人导航站点使用 搜索框输入关键词后&#xff0c;点击上方搜索引擎图标可跳转打开对应搜索引擎搜索结果&am…

UG二次开发 向量叉乘 UF_VEC3_cross

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG二次开发 向量叉乘 UF_VEC3_cross,xyz三个向量已知2个求另外1个。 效果: 代码: #include "me.hpp"void ufusr(char* param, int* retcode, int paramLe…

通讯软件019——分分钟学会Prosys OPC UA Server配置

本文介绍如何配置Prosys OPC UA Simulation Server&#xff0c;通过本文可以对OPC UA的基本概念有所了解&#xff0c;掌握OPC UA的本质。更多通信资源请登录网信智汇(wangxinzhihui.com)。 1、启动OPC UA Server Prosys OPC UA Simulation Server启动后就处于运行状态。 2、配…

将两个Series序列的元素按指定条件整合Series.combine()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 把两个序列中各元素 将相同索引对应的值 按指定函数进行整合 得到整合后的结果序列 Series.combine() [太阳]选择题 关于以下代码的说法中错误的是? import pandas as pd a pd.Series([0,3],…

推荐云智推地推拉新系统源码/任务分销神器

源码类型&#xff1a; PHP源码 显示语言&#xff1a; 简体中文 运行环境&#xff1a;PHPMySQLTP 功能内容会员管理&#xff1a;总代&#xff0c;服务商&#xff0c;员工 三种会员&#xff1b;封号&#xff0c;编辑&#xff0c;删除&#xff1b;可开启或关闭总代权限和邀请下级…

Google Hacking搜索

Google Hacking概述 GoogleHacking基本用法逻辑或OR逻辑与And逻辑非NOT完整匹配 GoogleHacking高级用法sitefiletypeinurlintitleintext Google Hacking DataBaseGoogle Hacking概述 GoogleHacking&#xff1a;利用搜索引擎有争对性的搜索信息来对网络入侵的技术和行为。搜索引…

NLP(六十九)智能文档问答助手升级

本文在笔者之前研发的大模型智能文档问答项目中&#xff0c;开发更进一步&#xff0c;支持多种类型文档和URL链接&#xff0c;支持多种大模型接入&#xff0c;且使用更方便、高效。 项目介绍 在文章NLP&#xff08;六十一&#xff09;使用Baichuan-13B-Chat模型构建智能文档中…

APP检测认证第三方检测机构

APP检测 APP检测的必要性&#xff1a; 软件&#xff08;APP&#xff09;安全属于软件领域里一个重要的子领域。在以前的单机时代&#xff0c;安全问题主要是操作系统容易感染病毒&#xff0c;单机应用程序软件安全问题并不突出。但是自从互联网普及后&#xff0c;软件安全问题…

文件上传漏洞第十六关

文件上传漏洞 解题 解题 首先查看一下页面情况 一如既往的是上传图片文件&#xff0c;这里提示我们本题对上传的图片重新进行了渲染。也就是说&#xff0c;我们这里上传的图片将会被打乱重组&#xff0c;那么如果还是将一句话木马和图片拼接&#xff0c;然后上传的话&#xf…

2023.9.6 Redis 的基本介绍

目录 Redis 的介绍 Redis 用作缓存和存储 session 信息 Redis 用作数据库 消息队列 消息队列是什么&#xff1f; Redis 用作消息队列 Redis 的介绍 特点&#xff1a; 内存中存储数据&#xff1a;奠定了 Redis 进行访问和存储时的快可编程性&#xff1a;支持使用 Lua 编写脚…

Flink CDC 菜鸟教程 -环境篇

本教程将介绍如何使用 Flink CDC 来实现这个需求, 在 Flink SQL CLI 中进行,只涉及 SQL,无需一行 Java/Scala 代码,也无需安装 IDE。 系统的整体架构如下图所示: 环境篇 1、 准备一台Linux 2、准备教程所需要的组件 下载 flink-1.13.2 并将其解压至目录 flink-1.13.2 …

MAC安装JDK8

说明 mac版本&#xff1a;MacBook Pro Intel mac系统&#xff1a;macOS Ventura 13.5.1 开始我试着用linux版本的jdk&#xff0c;通过解压的方式安装jdk&#xff08;先解压然后配置环境变量&#xff0c;类似linux安装步骤&#xff09;&#xff0c;但是有各种问题。比如修改环境…

价值10万的最强爽文短剧合集 短剧素材300多部

这是一个包含300多部短剧视频素材的集合&#xff0c;旨在为您的视频创作项目提供尽可能丰富和多样的选项。这些素材涵盖了各种类型和风格&#xff0c;包括但不限于喜剧、悲剧、惊悚、浪漫和冒险等&#xff0c;以满足您的多样化创作需求。 每部短剧视频素材都经过精心挑选和处理…

springboot集成Actuator+Prometheus+Grafana

一、环境准备 PrometheusGrafana环境准备 请参考我的博文&#xff1a;https://blog.csdn.net/luckywuxn/article/details/129475991 二、代码准备 我在本次实践中使用的springboot版本是2.6.13,然后在pom.xml文件中增加一下配置 <dependency><groupId>org.sprin…

【实训项目】基于JavaWeb的图书销售购物系统

1.引言 随着互联网的快速发展和普及&#xff0c;电子商务已经成为了人们购物的主要方式之一。在电子商务领域中&#xff0c;图书销售一直是一个重要的组成部分。随着人们对知识和阅读的需求不断增长&#xff0c;图书销售市场也呈现出蓬勃发展的态势。 传统的图书销售模式存在…

速学Linux丨一文带你打开Linux学习之门

前言 如果你是刚开始学习Linux的小白同学&#xff0c;相信你已经体会到与学习一门编程语言相比&#xff0c;学习Linux系统的门槛相对较高&#xff0c;你会遇到一些困惑&#xff0c;比如&#xff1a; 为什么要学习Linux&#xff0c;学成之后我们可以在哪些领域大显身手&#xf…

GitHubGiteeGitlab极狐(JihuLab)同时配置SSH公私钥详细过程

GitHub-微软-github.com Gitee-开源中国- gitee.com Gitlab-乌克兰GitLab 公司-gitlab.com 极狐(JihuLab)-中国代理商运营的Gitlab -gitlab.cn或者jihulab.com 使用SSH公钥可以让你在你的电脑和GitHub等平台通讯的时候使用更安全的连接&#xff08;Git的Remote要使用SSH地址&a…

第6篇 vue的打包工具webpack

一 webpack 1.1 webpack的作用 webpack是一个打包工具&#xff0c;可以把多个静态资源文件打包成一个文件。如图所示&#xff1a; 1.2 webpack的打包案例