210. 课程表 II

news2024/12/23 8:49:29

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:拓扑排序
  • 写在最后

Tag

【拓扑排序】


题目来源

210. 课程表 II


题目解读

在选修某些课程之前需要先学习某些课程,先学习的课程有数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] 表示为学习课程 ai 之前要先学习课程 bi。请你判断是否可以完成 numCourses 课程数的课程,如果可以返回任意一种课程的学习顺序,否则返回一个空数组。


解题思路

方法一:拓扑排序

本题与 207. 课程表 解法基本一致,都是考察 拓扑排序 的内容。

唯一的区别在于需要使用了一个数组 ret 来统计一种可行的课程学习顺序,我们从入度为 0 的课程编号出发,迭代的记录经过的课程编号。如果最后 ret.size() = numCourse 则表示,该数组记录的是一个可行的课程学习顺序,返回 ret,否则返回空数组。

实现代码

class Solution {
    #define maxn 2010
    vector<int> edges[maxn];
public:
    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
        int i, j;
        int n = prerequisites.size();
        queue<int> q;
        int in[maxn];
        memset(in, 0, sizeof(in));
        for(i = 0; i < n; ++i){
            int u = prerequisites[i][1];
            int v = prerequisites[i][0];
            ++in[v];
            edges[u].push_back(v);
        }

        for(i = 0; i < numCourses; ++i){
            if(in[i] == 0){
                q.push(i);
            }
        }
        vector<int> ret;
        while(!q.empty()){
            int u = q.front();
            ret.push_back(u);
            q.pop();

            for(i = 0; i < edges[u].size(); ++i){
                int v = edges[u][i];
                --in[v];
                if(in[v] == 0){
                    q.push(v);
                }
            }
        }
        if(ret.size() == numCourses){
            return ret;
        }
        return {};
    }
};

复杂度分析

时间复杂度: O ( n + m ) O(n+m) O(n+m),其中 n n n 为课程数, m m m 选修课程限制数组的长度。

空间复杂度: O ( n + m ) O(n+m) O(n+m),课程之间建立邻接表的空间复杂度为 O ( n + m ) O(n+m) O(n+m)。广搜中使用最多 O ( n ) O(n) O(n) 的队列空间。因此总空间复杂度为 O ( n + m ) O(n+m) O(n+m)


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

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

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

相关文章

机器学习入门教学——交叉验证

1、简介 交叉验证是在机器学习建立模型和验证模型参数时常用的办法&#xff0c;一般被用于评估一个机器学习模型的表现。更多的情况下&#xff0c;我们也用交叉验证来进行模型选择。【注】在训练模型时&#xff0c;为了提高模型的质量&#xff0c;我们会将数据集划分为训练集、…

【算法与数据结构】501、LeetCode二叉搜索树中的众数

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;根据前面几篇文章98、LeetCode验证二叉搜索树、530、LeetCode二叉搜索树的最小绝对差。我们知道二叉搜…

大数据分析案例-基于随机森林算法构建二手房价格预测模型

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集…

钟爱墨西哥市场?长城汽车官宣进入,已启动本地化生产研究和规划

长城汽车公司宣布正式进入墨西哥市场&#xff0c;并以“Hello Tomorrow”为主题发布了GWM品牌暨哈弗H6 HEV车型。这标志着长城汽车在墨西哥市场的运营开始&#xff0c;公司已启动本地化生产的研究和规划工作。 据悉&#xff0c;长城汽车公司已在拉丁美洲开设24家经销商&#xf…

代码随想录第45天|70. 爬楼梯,322. 零钱兑换,279.完全平方数

70. 爬楼梯 开始按感觉做 class Solution {public int climbStairs(int n) {//第一版按感觉做//dp[i]爬到第i个台阶的方法数int[] dpnew int[n1];//初始化dp[0]1;dp[1]1;for(int i2;i<n;i){dp[i]dp[i-1]dp[i-2];}return dp[n];} } 改进-用完全背包做 这是背包里求排列问…

关于点光源踩坑的一点总结

1 点光源不能单独作用域几何体。需要有其他光源的辅助 2 如果你添加了点光源&#xff0c;同时设置的是默认值&#xff0c;那么界面上很可能展示的几何体没有任何光源效 3对于点光源特别注意它的属性光照距的衰退量也就是decay。其默认值为2.&#xff0c;如果我们设置一个较小…

国产编程IDE到底败在哪里?E4A安卓开发,猎码,易语言,火山

最新发现&#xff0c;原来的猎码下载链接都找不到了&#xff0c;再也没有猎码的影子了。 猎码的好处是Jdk,ADK等一起打包了解压自动配置好环境;编绎时各种出错情况提示不人性化&#xff0c;比较难用。 最近出了一款Amix&#xff0c;说是支持跨平台,安卓APP,小程序开发等功能。…

深度思考ES面经

1 推荐文章 2万字详解&#xff0c;吃透 Elasticsearch 2 什么是倒排索引&#xff0c;为什么这么叫&#xff1f; 倒排索引&#xff08;Inverted Index&#xff09;是一种为快速全文搜索而设计的数据结构。它被广泛应用于搜索引擎&#xff0c;其中 Elasticsearch&#xff08;简…

报错处理:Docker镜像无法启动

报错环境&#xff1a; Linux Docker 具体报错&#xff1a; standard_init_linux.go:211: exec user process caused "no such file or directory" 排错思路&#xff1a; 当尝试启动Docker镜像时&#xff0c;如果出现 no such file or directory 的错误&#xff0c;可…

简单记录一下Splunk ES 升级

1: 背景: 现在有些app 产品对splunk ES (enterprise security) 的版本有要求,这个就要求splunk ES 随着Splunk enterprise 也一起升级,下面先列一下各个版本的兼容: Splunk products version compatibility matrix - Splunk Documentation 下面列出的8.2.11 的版本: 2:…

Electron和vue3集成

本篇我们仅实现Electron和vue3通过先运行起vue3项目&#xff0c;再将vue3的url地址交由Electron打开的方案&#xff0c;仅由Electron在vue3项目上套一层壳来达到脱离本机浏览器运行目的 1、参考快速上手 | Vue.js搭建起vue3初始项目 npm install -g vue npm install -g vue/c…

【拯救大学生计划】:我做了一个QQ分组神器

文章目录 &#x1f60a;前言&#x1f603;使用教程第一步&#xff1a;获取好友网名和备注第二步&#xff1a;文件设置第三步&#xff1a;自动选择好友 &#x1f606;停顿问题解决方法&#x1f604;结束语&#x1f4da;资源 专栏Python零基础入门篇&#x1f525;Python网络蜘蛛&…

【改进算法】【IHAOAVOA】天鹰优化算法和非洲秃鹫混合优化算法

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现《IHAOAVOA: An improved hybrid aquila optimizer and African vultures optimization algorithm for global optimization problems》&#xff0c;天鹰优化算法&#xff08;AO&#xff09;和非洲…

智慧工地: 建筑施工一体化信息管理系统源码

智慧工地管理云平台系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段&#xff0c;实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 一、智慧工地管理系统让工程施工智能化 1、内容全面&a…

区块链技术与应用 - 学习笔记3【比特币数据结构】

大家好&#xff0c;我是比特桃。本系列笔记只专注于探讨研究区块链技术原理&#xff0c;不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划&#xff0c;在“加快数字发展 建设数字中国”篇章中&#xff0c;区块链被列为“十四五”七大数字经济重点产业之一&#…

(二十五)大数据实战——kafka集群及Kafka-Eagle控制台安装与部署

前言 本节内容我们主要介绍一下搭建kafka集群以及kafka集群的一个web客户端组件Kafka-Eagle的部署安装&#xff0c;使用的kafka版本是kafka_2.12-3.0.0。在搭建kafka集群之前&#xff0c;我们要预先搭建好zookeeper集群&#xff0c;这里作者默认zookeeper的集群环境已经搭建完…

飞行动力学 - 第18节-全机航向稳定性与隐身性 之 基础点摘要

飞行动力学 - 第18节-全机航向稳定性与隐身性 之 基础点摘要 1. 全机航向静稳定性2. 垂尾与隐身3. 参考资料 1. 全机航向静稳定性 机翼贡献 上反角 复杂、极小幅降低 后掠角 增加稳定性 机身贡献 降低稳定性 尾翼贡献 航向静稳定性的最大来源 平尾 类似机翼贡献 垂尾 最大来…

DAMO-YOLO训练自己的数据集,使用onnxruntime推理部署

DAMO-YOLO训练自己的数据集&#xff0c;使用onnxruntime推理部署 DAMO-YOLO 是阿里达摩院智能计算实验室开发的一种兼顾速度与精度的目标检测算法&#xff0c;在高精度的同时&#xff0c;保持了很高的推理速度。 DAMO-YOLO 是在 YOLO 框架基础上引入了一系列新技术&#xff0…

wpf C# 用USB虚拟串口最高速下载大文件 每包400万字节 平均0.7s/M,支持批量多设备同时下载。自动识别串口。源码示例可自由定制。

C# 用USB虚拟串口下载大文件 每包400万字节 平均0.7s/M。支持批量多设备同时下载。自动识别串口。可自由定制。 int 32位有符号整数 -2147483648~2147483647 但500万字节时 write时报端口IO异常。可能是驱动限制的。 之前用这个助手发文件&#xff0c;连续发送&#xff0…

Vim9和其他软件的文本复制、粘贴

大家都知道&#xff1a;在Vim9中使用y和p命令来进行文本的复制和粘贴&#xff0c;今天我来说一说Vim和其他软件之间的文本复制、粘贴操作。 Vim9和其他软件进行复制、粘贴&#xff0c;其原理就是通过系统剪贴板作为中介来执行操作。 一、从Vim9复制文本内容 按住鼠标左键滑出…