LeetCode 1136. 平行课程(拓扑排序)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

已知有 N 门课程,它们以 1 到 N 进行编号。

给你一份课程关系表 relations[i] = [X, Y],用以表示课程 X 和课程 Y 之间的先修关系:课程 X 必须在课程 Y 之前修完。

假设在一个学期里,你可以学习任何数量的课程,但前提是你已经学习了将要学习的这些课程的所有先修课程。

请你返回学完全部课程所需的最少学期数

如果没有办法做到学完全部这些课程的话,就返回 -1。

示例 1:
在这里插入图片描述

输入:N = 3, relations = [[1,3],[2,3]]
输出:2
解释:
在第一个学期学习课程 12,在第二个学期学习课程 3

示例 2:
在这里插入图片描述

输入:N = 3, relations = [[1,2],[2,3],[3,1]]
输出:-1
解释:
没有课程可以学习,因为它们相互依赖。提示:
1 <= N <= 5000
1 <= relations.length <= 5000
relations[i][0] != relations[i][1]
输入中没有重复的关系

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/parallel-courses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

拓扑排序:图Graph–拓扑排序(Topological Sorting)

  • 拓扑排序模板题,入度为0的入队
class Solution {
public:int minimumSemesters(int N, vector<vector<int>>& relations) {unordered_map<int,unordered_set<int>> m;vector<int> indegree(N+1, 0);for(auto& re:relations){indegree[re[1]]++;m[re[0]].insert(re[1]);}queue<int> q;int cur, size, sum = 0, finish = 0;for(int i = 1; i <= N; ++i)if(indegree[i] == 0)q.push(i);while(!q.empty()){size = q.size();while(size--){cur = q.front();q.pop();finish++;for(auto it = m[cur].begin(); it != m[cur].end(); ++it){if(--indegree[*it] == 0)q.push(*it);}}sum++;}return finish==N ? sum : -1;}
};

148 ms 26.3 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

linux强制停止压缩任务,6.25任务(linux压缩、打包命令:zip、tar)

6.5 zip压缩工具前面的三个命令都不支持压缩目录&#xff0c;但是zip支持&#xff1a;首先压缩文件[rootlocalhost gzip]# yum -y install zip[rootlocalhost gzip]# zip b.txt.zip b.txtadding: b.txt (deflated 74%)[rootlocalhost gzip]# ls //原文件依旧存在。不…

【Android】Uri和Url和URN

最早在Android方面接触这两个概念&#xff0c;是学习ContentProvider的时候&#xff0c;当时花了很多时间&#xff0c;始终不能很好的理解他们的区别&#xff0c;顺带着ContentProvider的用法也无法理解&#xff0c;最近通过实现网页链接和Android-APP的无缝跳转问题&#xff0…

LeetCode 1259. 不相交的握手(DP)

文章目录1. 题目2. 解题1. 题目 偶数 个人站成一个圆&#xff0c;总人数为 num_people 。 每个人与除自己外的一个人握手&#xff0c;所以总共会有 num_people / 2 次握手。 将握手的人之间连线&#xff0c;请你返回连线不会相交的握手方案数。 由于结果可能会很大&#xf…

查看系统表存储过程名称

SELECT *,OBJECT_NAME(id) FROM syscomments转载于:https://www.cnblogs.com/niaowo/archive/2013/04/21/3033668.html

外星人装深度linux,17xR4深度拆机教程、加装MSATA固态硬盘及评测

本帖最后由 wellsyue 于 2012-6-20 20:45 编辑看到其他板块在三代IVY推出后&#xff0c;陆续发布了很多加装MSATA的帖子&#xff0c;发现外星人板块还没有17R4加装MSATA的帖子&#xff0c;在此&#xff0c;发布M17x R4加装MSATA教程一贴&#xff0c;既然是教程&#xff0c;就应…

LeetCode 248. 中心对称数 III(DFS/BFS)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字&#xff08;或者上下颠倒地看&#xff09;。 写一个函数来计算范围在 [low, high] 之间中心对称数的个数。 示例: 输入: low "50", high "10…

sysctl简介

sysctl配置与显示在/proc/sys目录中的内核参数&#xff0e;可以用sysctl来设置或重新设置联网功能&#xff0c;如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件&#xff0c;即可手工或自动执行由sysctl控制的功能。 命令格式&#xff1a; sysctl [-…

u盘引导linux加载raid卡驱动,使用U盘加载SCSI/RAID卡驱动

hai00882008-01-30 15:53我只備份一次,我的磁帶有400G, 備份第二次,磁帶就彈出來,我的tapelist里的內容 20080130151855 DailySet1-01 reuse是不是和我的anmanda.conf的chg-manua(更換磁帶的腳本)l這個腳本有關係,-sh-3.00$ amcheck DailySet1Amanda Tape Server Host Check---…

LeetCode 1067. 范围内的数字计数

文章目录1. 题目2. 解题1. 题目 给定一个在 0 到 9 之间的整数 d&#xff0c;和两个正整数 low 和 high 分别作为上下界。 返回 d 在 low 和 high 之间的整数中出现的次数&#xff0c;包括边界 low 和 high。 示例 1&#xff1a; 输入&#xff1a;d 1, low 1, high 13 输…

多参的实现原理

相信大家都使用过C语言的库函数&#xff1a;printf("%d%d", 1, 2)的吧&#xff0c;使用确实很方便功能也很强大。 但是为什么它可以接受多个参数呢&#xff1f; 现在我们来解析一下多参的实现原理&#xff0c;网上也找了一些文章。发现解析得都不全面。并且有BUG。 先…

学生成绩统计c语言课程设计,学生成绩管理系统-C语言课程设计

记一次课程设计作业 学生成绩管理系统#include#include#include#include/*学生成绩管理系统介绍2017C语言课程设计 2021609361.支持将数据保存到文件并从文件中读取已有数据2.支持添加、删改数据3.支持按学号或姓名查询、删除、修改数据4.支持简单统计&#xff0c;包括 不及格…

LeetCode 439. 三元表达式解析器

文章目录1. 题目2. 解题2.1 递归2.2 循环1. 题目 给定一个以字符串表示的任意嵌套的三元表达式&#xff0c;计算表达式的值。 你可以假定给定的表达式始终都是有效的并且只包含数字 0-9, ?, :, T 和 F (T 和 F 分别表示真和假&#xff09;。 注意&#xff1a; 给定的字符串…

Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...

《Java中&#xff0c;String类型和包装类型作为参数传递时&#xff0c;是属于值传递还是引用传递呢?》 《Java中的值传递和引用传递》 原理知识: 如果参数类型是原始类型&#xff0c;那么传过来的就是这个参数的一个副本&#xff0c;也就是这个原始参数的值&#xff0c;这个跟…

c语言结构内部定义指针,C语言知识补漏(一)结构体指针以及位域定义

一、结构体指针typedef struct{unsignedlong int DATA;unsignedlong int DIRECTION;unsignedlong int INTERRUPT_MASK;unsignedlong int EDGE_CAPTURE;}PIO_STR;//define LED Register#ifdef _LED#define LED ((PIO_STR *)LED_BASE) //表示定义了一个PIO_STR的指针&#xff0c;…

LeetCode 1216. 验证回文字符串 III(DP)

文章目录1. 题目2. 解题1. 题目 给出一个字符串 s 和一个整数 k&#xff0c;请你帮忙判断这个字符串是不是一个「K 回文」。 所谓「K 回文」&#xff1a;如果可以通过从字符串中删去最多 k 个字符将其转换为回文&#xff0c;那么这个字符串就是一个「K 回文」。 示例&#x…