Leetcode210-Course Schedule II

GCJ02坐标系转WGS84坐标系(已实地测试基本无偏差) 坐标系转化,GCJ02坐标系,WGS84坐标系 阅读详情

我的新博客地址:Hu Haoyu’s Blog,欢迎参观!

There are a total of n courses you have to take, labeled from 0 to n - 1.

Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

Given the total number of courses and a list of prerequisite pairs, return the ordering of courses you should take to finish all courses.

There may be multiple correct orders, you just need to return one of them. If it is impossible to finish all courses, return an empty array.

For example:

2, [[1,0]]

There are a total of 2 courses to take. To take course 1 you should have finished course 0. So the correct course order is [0,1]

4, [[1,0],[2,0],[3,1],[3,2]]

There are a total of 4 courses to take. To take course 3 you should have finished both courses 1 and 2. Both courses 1 and 2 should be taken after you finished course 0. So one correct course order is [0,1,2,3]. Another correct ordering is[0,2,1,3].

Note:
The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how a graph is represented.

题意

共有n节课程,课程编号从0至n-1。一些课程可能有先修要求,比如修0号课程前需要先修1号课程,表示为[0,1]。题目给出课程数和先后修课程对,要求返回完成所有课程的顺序。可能有很多正确的上课顺序,你只需返回其中一种。如果不可能完成,则返回空数组。

比如:

2, [[1,0]]

共有2节课程。选修1号课程前需要先修0号课程,故上课顺序为[0,1]。

4, [[1,0],[2,0],[3,1],[3,2]]

共有4节课程。正确的上课顺序为[0,2,1,3]。

提示:

输入的prerequisites是由边表示的图,而非邻接矩阵。

分析

此题是Leetcode207-Course Schedule的进阶版,前者只需得出能否完成所有课程即可,本题还需要给出上课顺序。实际上这是一个求拓扑排序的题(至于是拓扑全序还是拓扑偏序,是不一定的)。可以有2种求解方法。

  • 第一种:采用bfs。前处理时得到每个节点的入度。每次将入度为0的节点入队。出队时将出队节点的邻接节点的入度减1,并将出队节点编号计入answer数组中。循环该过程直到队列为空。如仍有节点未被访问,则说明课程关系图中出现了环,不可能完成所有课程。否则,answer中的编号顺序就是上课顺序。

  • 第二种:采用dfs。需要一个onStack数组纪录dfs的路径上的节点,用于判断环的存在。而isVisited数组责纪录dfs中访问过的节点。而其reversePostOrder就是上课顺序。具体可以google搜索reversePostOrder。这种方法比较难理解,但很有意思。最终给出的AC代码也是第二种方法。

注意

  • 值得注意的是,特殊情况输入numCourses = 1,prereqisities为空数组时,答案为[0],只有1个节点,并没有边的存在。

  • 第二种方法中onStack在每次结束本次递归时,需要变为false,表示这条路径上后面的节点在后面的判断环中,不会被认为是同一路径上的节点。(感觉好绕)

AC代码

class Solution {
public:
    vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
        vector<int> answer;
        if (numCourses == 1) {
            answer.push_back(0); return answer;
        }
        vector<vector<int>> map(numCourses, vector<int>());
        stack<int> reversePostOrder;
        for (int i = 0; i < prerequisites.size(); ++i) {
            map[prerequisites[i].second].push_back(prerequisites[i].first);
        }
        vector<bool> isVisited(numCourses, false);
        for (int i = 0; i < numCourses; ++i) {
            if (!isVisited[i]) {
                vector<bool> onStack(numCourses, false);
                if (hasCycle(map, i, isVisited, onStack, reversePostOrder))
                    return answer;
            }
        }
        while (!reversePostOrder.empty()) {
            int index = reversePostOrder.top(); reversePostOrder.pop();
            answer.push_back(index);
        }
        return answer;
    }
    bool hasCycle(vector<vector<int>> &map, int i, vector<bool> &isVisited, vector<bool> &onStack, stack<int> &reversePostOrder) {
        isVisited[i] = true;
        onStack[i] = true;
        for (int k : map[i]) {
            if (onStack[k])
                return true;
            else if (!isVisited[k])
                if (hasCycle(map, k, isVisited, onStack, reversePostOrder))
                    return true;
        }
        onStack[i] = false;
        reversePostOrder.push(i);
        return false;
    }
};

如果代码或分析有误,请批评指正,谢谢。

C# WinForms 多语种切换实现:打造国际化应用程序 合理实现多语种切换功能可以显著提升应用程序的国际化水平。模块化设计:将本地化逻辑模块化,便于管理和维护。异常处理:始终捕获和处理可能的异常,确保程序的健壮性。资源管理:合理管理资源文件,避免重复和遗漏。测试:在不同语言环境下进行全面测试,确保所有字符串都能正确显示。文档和注释:为关键代码添加详细的文档和注释,便于后续维护。 阅读详情

相关推荐

BERTopic模型入门教程(附代码+参数调节)

BERTopic 是一种用于从文本数据中提取主题模型的新型方法。通过结合 BERT嵌入和传统的主题模型来生成语义丰富的主题。传统的主题模型(如LDA)主要依赖于词频矩阵,而 BERTopic 通过预训练语言模型生成高维语义嵌入来捕捉词语间的复杂关系,因此可以更好地处理上下文信息。BERTopic模型可以看作是创建其主题表示的一系列步骤。核心原理如下:就本质而言,BERTopic就是一个拼装框架,可以把每部分都替换成其他模型,只要完成任务即可。

m0_52069102的博客 1万+

210. Course Schedule II(DFS)

There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as

X2321002的博客 449

私有化大模型部署:企业AI应用的核心架构

私有化大模型部署不是“一次性项目”,而是企业AI的“长期主义”投资——它需要企业投入时间、金钱和精力,但回报是数据安全、定制化能力、核心竞争力的提升。就像“自家厨房”一样,私有化大模型可能初期麻烦,但一旦搭建起来,就能为企业“做”出符合自己口味的“特色菜”,而这些“特色菜”,正是企业在激烈竞争中的“护城河”。愿你能构建属于自己的“AI大脑”,让技术真正赋能业务,让复杂变简单,让深奥变通透。附录:私有化大模型部署架构图(注:可根据企业需求调整,此为通用架构)

AI天才研究院 1022

LeetCode 210. Course Schedule II(课程安排)

原题网址:https://leetcode.com/problems/course-schedule-ii/ There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prerequisites, for example to take cour

James Pan 926

论文阅读 Quantum Convolutional neural network

在传统的局域序参量(如磁化强度 ⟨Xi⟩)无法有效区分某些拓扑相(如 Haldane 相)时,字符串序参量(SOP)提供了一种方法来识别这些相。字符串序参量的定义通常涉及多个远离的站点之间的长程关联,通常具有如下形式:Zi,Xk,Zj是泡利矩阵(Pauli operators)。指数项 eiπ∑k=ijXk表示一个相位因子。这意味着我们要计算两个远离站点 i,j 的Z 分量的关联,同时考虑它们之间的X 作用。这个非局域的字符串序参量可以用来检测对称保护拓扑(SPT)相。

m0_54373077的博客 2002

Buck-Boost电路

前面我们学习了降压的Buck电路 (左图) 和升压的Boost电路 (右图),那么如果我们把Buck电路和Boost电路结合一下会发生什么情况? 我们尝试着画一下: 我们用Buck电路作为输入,然后用Boost电路进行调整,最后输出。因此Buck电路中的负载、Boost电路的电源都可以删掉。得到下图: 由于Buck电路中的C2的作用是在输出的时候滤波,这个功能已经由Boost电路中的C1实现了,因此可以删除Buck电路中的C2电容。得到下图: 这里两个电感处于串联状态,可以合二为一,得到下面的电路:

wangeil007的博客 4万+

LeetCode210 课程安排 II

There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair:...

fruit513的博客 354

SAP固定资产原值与净值取值逻辑全解析:从数据表到ABAP实战

在企业资源计划(ERP)系统中,固定资产的价值管理是财务会计的核心模块,其关键在于准确核算资产原值与净值。从技术原理上看,这涉及对资产全生命周期业务(如购置、折旧、转移、报废)的财务建模,以及底层数据表(如ANLC、ANEP)的精准关联与计算。掌握这一逻辑的技术价值在于,能够确保财务报表数据的准确性,满足合规性要求,并为管理决策提供可靠依据。在SAP ECC或S/4HANA系统的应用场景中,ABAP开发者与财务顾问常需通过编写报表程序,从复杂的数据结构中提取资产价值信息。本文聚焦于SAP资产会计模块,深入剖

weixin_30984001的博客 393

Leetcode 210 Course Schedule II 课程表II

你需要上n个课程,标记为0~n-1。有些课程有前导课,比如你要上课程0必须先上课程1,我们用一个整数对[0,1]来表示。给出课程的总数和一系列的课程先导关系对,返回可以上完所有的课程的上课顺序。可能存在多种正确的顺序,你只需要返回其中一种即可。如果不可能上完所有课程,返回一个空数组。

(ง •̀_•́)ง 2317

STM32F103VET6实战:用W25Q64外部Flash实现Bootloader+Application双备份(含完整代码解析)

本文详细介绍了基于STM32F103VET6微控制器和W25Q64外部Flash实现Bootloader+Application双备份固件升级的完整方案。通过精心设计的Flash分区策略、可靠的Bootloader程序以及包含双重校验和自动回滚机制的升级流程,有效解决了远程升级过程中断电导致设备变砖的风险,确保了工业嵌入式系统的高可靠性与稳定性。

linux的博客 823

Ansys Fluent DPM模型实战:旋风分离器颗粒轨迹仿真全流程解析(附案例文件)

本文详细解析了使用Ansys Fluent中的离散相模型进行旋风分离器颗粒轨迹仿真的全流程。从几何简化、网格策略到物理模型界定,重点阐述了DPM模型的关键设置步骤,包括单向耦合假设、颗粒注入与受力配置,并提供了结果分析与优化方法,帮助工程师精准模拟气固分离过程,提升设计效率。

sunny的博客 703

LeetCode#210 Course Schedule II(C++版)

题干: There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expr

zc2985716963的博客 454

一文搞懂蚁群算法Ant Colony Optimization(ACO)!!!(灵感起源+数学原理+代码实现+实战应用)

本文系统介绍了蚁群算法的原理与实现。首先从蚂蚁觅食行为出发,阐释了信息素正反馈机制如何引导群体找到最短路径。随后详细解析了算法的数学模型,包括状态转移规则和信息素更新机制。通过MATLAB代码演示了算法在旅行商问题(TSP)中的应用,展示了路径构建和优化的完整流程。最后讨论了算法的优势、局限性和实际应用场景。蚁群算法通过模拟生物智能,为解决复杂优化问题提供了一种高效方法,其核心在于信息素的正反馈机制与随机探索的平衡。

qq_42212808的博客 887

leetcode题集: 210. Course Schedule II

第13题:210.Course Schedule II 类似之前写的那篇,这里就不分析了。 题目具体分析请见leetcode题集: 207. Course Schedule和 拓扑排序 两篇文章。就是拓扑排序,加个打印输出拓扑序列。这里直接贴代码了: class Solution { public: vector<int> findOrder(int numC...

wx_14678的博客 206

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LeetCode 210. Course Schedule II 题解

本题是拓扑排序的经典问题,是课程表问题的延伸,主要考察对拓扑排序算法的理解和应用。通过构建邻接表和入度数组,然后使用队列进行拓扑排序,我们可以不仅判断是否可以完成所有课程的学习,还可以返回具体的课程学习顺序。拓扑排序的核心思想是:按照依赖关系的顺序,依次处理入度为 0 的节点。如果最终所有节点都被处理,说明不存在环,返回处理顺序;否则,说明存在环,返回空数组。这种方法不仅适用于课程表 II 问题,还可以应用于许多其他需要处理依赖关系并返回处理顺序的场景,例如任务调度、编译顺序等。

cannonjinx的博客 4256

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

leetcode题解:第210题Course Schedule II

题目 Course Schedule II There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which ...

chenf1999的博客 268

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LeetCode 210 Course Schedule II

题目描述There are a total of n courses you have to take, labeled from 0 to n - 1.Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a p

Yano_nankai的博客 1631

LeetCode: 210. Course Schedule II

LeetCode: 210. Course Schedule II 题目描述 There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prerequisites, for example to take course 0 you have to first take ...

杨领well的专栏 186

【Leetcode】210. Course Schedule II

题目地址: https://leetcode.com/problems/course-schedule-ii/ 给定给定一个正整数代表需要修的课程数量,再给定修各个课程的先后次序关系(是一个二维数组,每个位置的(a,b)(a,b)(a,b)代表bbb是aaa的前置课程)。问是否存在一种上课顺序能上完所有的课。如果能,返回一种上课顺序;否则返回一个空数组。 用图论建模,可以把每个课程想象成图中的顶点......

数学、算法爱好者的博客 442

leetcode 210: Course Schedule II

leetcode 210: Course Schedule II Course Schedule 2 java c++ python

西施豆腐渣 4641

Leetcode 207. Course Schedule 210. Course Schedule II

Leetcode 207. Course Schedule  import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Solution { public boolean canFinish(int numCour

独钓寒江雪 318

【Leetcode刷题笔记】210. Course Schedule II 有向图能否完全遍历?无环?

class Solution { public: /* 思路:在有向图中能否找到一个无环的路径,遍历所有的节点。 如果有环,则证明无法找到。 贪心思想:首先找到节点中入度为0的节点来进行初始遍历,为什么要入度为0呢? 因为入度为0的情况下,没有其他节点能达到这个节点; 那么如果我们需要遍历所有节点的话,那么我们必须首先从这个节点开始。 ...

知吾朱期应庆的博客 357

LeetCode 207. Course Schedule && LeetCode 210. Course Schedule II

LeetCode 207. Course Schedule && LeetCode 210. Course Schedule II (Medium) 主要知识点:拓扑排序、BFS、DFS;优先级:5

温迪今天刷题了吗 981

LeetCode 210. Course Schedule II【Java】

210. 课程表 II AC代码 本题和207.课程表类似,不过要求让我们输出排课的顺序,也就是拓扑序列了。 在这里返回结果的时候注意,如果这是个有环的图,那么答案数组返回的应该是空数组,之前我没注意,当样例如下时: 2 [[0,1],[1,0]] 返回的结果是[0,0],实际上应该是空数组。为了解决这个问题我们可以和207题一样,通过cnt来计数,最终和课程数相同的话,就返回答案数组否则返回空...

NayelyA的博客 281

【LeetCode 210】Course Schedule II

题意: 在判断能否修完全部课程的基础上,如果能,输出任意一个课程顺序。 思路: 递归。在判断是否有环的基础上,记录访问顺序。 代码: class Solution { public: vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) { ...

iCode_girl的博客 142

leetcode 210. Course Schedule II | 210. 课程表 II(Java)

题目 https://leetcode.com/problems/course-schedule-ii/ 题解 本题与 leetcode 207. Course Schedule 基本相同,代码只需要稍作修改,将图的遍历顺序记录在一个 list 中。 import java.util.ArrayList; import java.util.Collections; class Node { int inDegree; ArrayList<Integer> children;

寒泉 5万+
上一篇: Leetcode209-Minimum Size Subarray Sum
下一篇: Pseudo-random algorithm: prd and rsa based
coderhuhy
博客等级 码龄12年 24粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值