Leetcode-207. 课程表 Course Schedule (拓扑排序) -超详细python

Leetcode 207. Course SchedulePython实现) 思路:将边集合构成一个有向图,判断有向图中是否存在环,如果存在环,则一定不能完成该课程;如果不存在环,还需判断,能否遍历到每个结点,如果能遍历到,那么课程能全部完成,则不然。这里判断有向图中是否存在环,用拓扑排序来实现。 class Solution: def canFinish(self, numCourses: int, prerequisites: List[List[int]]... 阅读详情

题目

你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。
在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]
给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?
链接:https://leetcode.com/problems/course-schedule/

There are a total of numCourses courses you have to take, labeled from 0 to numCourses-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, is it possible for you to finish all courses?

Example:

Input: numCourses = 2, prerequisites = [[1,0]]
Output: true
Explanation: There are a total of 2 courses to take.
To take course 1 you should have finished course 0. So it is possible.

思路及代码

拓扑排序:有向图判断是否无环
  • 将所有点的入度初始化为1
  • 用一个dict来存{出点:入点},用list来存每个点的入度
  • 筛选出所有入度为0的点,并逐一删除
  • 如果最后不剩点了,说明没有环
class Solution:
    def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
        # 有向图找环:拓扑排序
        indegrees = [0] * numCourses
        graph = collections.defaultdict(list)
        for pre in prerequisites:
            graph[pre[1]].append(pre[0])
            indegrees[pre[0]] += 1
        zero = collections.deque([])
        for i in range(numCourses):
            if not indegrees[i]:
                zero.append(i)
        while zero:
            cur = zero.popleft()
            for course in graph[cur]:
                indegrees[course] -= 1
                if not indegrees[course]:
                    zero.append(course)
        return not sum(indegrees)

复杂度

T=O(n)T = O(n)T=O(n)
S=O(n)S = O(n)S=O(n)

Cadence IC618/Spectre231安装避坑指南:详解环境变量配置与License管理那些事儿 本文深入解析Cadence IC618/Spectre231安装过程中的环境变量配置与License管理难题,提供从变量冲突解决到高效License管理的实用方案。针对常见的64位标识冲突、路径污染及License服务器连接问题,给出具体诊断步骤和优化建议,帮助用户构建稳定可靠的EDA环境。 阅读详情

相关推荐

ADS交叉耦合振荡器VCO相位噪声优化仿真实践

本文详细介绍了在ADS软件中搭建和优化交叉耦合VCO相位噪声的完整仿真实践。通过谐波平衡与瞬态仿真分析电路性能,并重点阐述了通过提升谐振腔Q值、优化晶体管工作点及改善尾电流源来有效降低相位噪声的具体方法,为射频电路设计提供了实用指南。

weixin_29235923的博客 575

判断图中是否有环的三种方法

0 什么是环? 在图论中,环(英语:cycle)是一条只有第一个和最后一个顶点重复的非空路径。 在有向图中,一个结点经过两种路线到达另一个结点,未必形成环。 1 拓扑排序 1.1 无向图 使用拓扑排序可以判断一个无向图中是否存在环,具体步骤如下: 求出图中所有结点的度。 将所有度 <= 1 的结点入队。(独立结点的度为 0) 当队列不空时,弹出队首元素,把与队首元素相邻节点的度减一。如果相邻节点的度变为一,则将相邻结点入队。 循环结束时判断已经访问的结点数是否等于 n。等于 n 说明全部结点都.

CC 5万+

拓扑排序(还实现了有向图找环)

用邻接矩阵实现的拓扑排序,如果不是DAG,会找出有向图中的一个环(NKU算法作业)

拓扑排序:判断有向图是否有环(超级详细剖析!!)+207. Course Schedule实例

本文先给定义,接着以举例的形式讲解算法原理,最后使用python实践 --------------------------------------------------------------------------------------------------------------------------------------------------------------------...

爱吃火锅的博客 1万+

拓扑排序(判断是否是有向无环图DAG)【dfs+bfs】

拓扑排序原理:对有向无环图DAG的顶点进行排序,使得对于每一条有向边(u,v),均有u(在排序记录中)比v先出现,亦可理解为对某点v而言,只有当v的所有源点均出现了v才能出现 根据定义,可以得到以下两个结论: 如果图G中存在环(即G不是有向无环图),那么G不存在拓扑排序,反之如果G存在拓扑排序,则G中没有环 如果G是有向无环图,那么他的拓扑排序可能不止一种 我们用两种方法来求解拓扑排序:dfs和bfs 方法一 :深度优先搜索 我们用一个栈来存储所有已经搜索完成的结点,对于某个结点,他在搜索过程..

peko1的博客 2637

拓扑排序判断有向图中是否有环

拓扑排序的工程意义 拓扑排序是对一个有向图构造拓扑序列,解决工程是否能顺利进行的问题。构造时有222种结果: 此图全部顶点被输出:说明说明图中无「环」存在, 是 AOV 网(有向无环图) 没有输出全部顶点:说明图中有「环」存在,不是 AOV 网 主要思想 遍历所有入度为000的节点,并由该节点刷新其指向节点的度,即将其指向节点的入度减111,当该节点入度为000,将其加入队列。最后查看所有节点的入度是否为000,如果全部为000,说明该网络是有向无环图。 例题 LeetCode.207 课程表 你这个学

qq_41358366的博客 3834

拓扑排序(判断有向图中是否有环)

Kahn算法: //n为点的数量,in数组用来记录每个点的入度,edges数组用来记录每个点所指向的所有点 vector<int>in(n); vector<vector<int>>edges; //首先把所有入度为0的点放到que中,再依次把这些点从图中删掉(即把它指向的点的入度减一); //再寻找入度为0的点,重复下去。直到所有的点都被从图中删掉。 bool toposort(int n) { vector<int>ans(n); queue&l.

weixin_51796903的博客 1820

Leetcode 207.课程表Course Schedule

Leetcode 207.课程表 1 题目描述(Leetcode题目链接)   你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1] 给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习? 输入: 2, [[1,0]] 输...

qq_39378221的博客 577

[leetcode] 207. Course Schedule 解题报告

题目链接:https://leetcode.com/problems/course-schedule/ 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

小榕流光的专栏 1938

leetcode 207: Course Schedule

leetcode 207 : Course Schedule

西施豆腐渣 5421

Leetcode 207. Course Schedule (python+cpp)

Leetcode 207. Course Schedule题目解法:拓扑排序 题目 解法:拓扑排序 这道题目是很经典的拓扑排序,用BFS和DFS都可以实现,就跟Leetcode 785一样,BFS解法和DFS解法只差储存数据是用队列还是栈。具体解法如下: 建立一个邻接矩阵表示图,在建立邻接矩阵的时候注意指向,必须是前修课程指向后修课程 同时将所有入度为0的点加入队列或者栈 进行搜索,将入度为0的点的相邻节点入度全部减1,如果出现了新的节点,那么将新节点加入队列和栈 搜索结束后,如果图中所有节点都入度为0

qq_37821701的博客 498

Leetcode 207. Course Schedule + Leetcode 210. Course Schedule II(详细题解)

Leetcode 207. Course Schedule + Leetcode 210. Course Schedule II 你需要上n个课程,标记为0~n-1,有些课程有前导课,比如你要上课程0必须先上课程1,我们用一个整数对[0,1]来表示。 给出课程的总数和一系列的课程先导关系对,判断是否可能上完所有的课程!

rainMan的博客 305

[leetcode] 207. Course Schedule

Description 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 expresse...

Learning from the mistakes 237

Leetcode 210.课程表 II(Course Schedule II)

Leetcode 210.课程表 II 1 题目描述(Leetcode题目链接)   现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。 可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能...

qq_39378221的博客 285

Leetcode 207. Course Schedule + Python中defaultdict用法详解

ContentsPython中defaultdict用法认识defaultdict:如何使用defaultdictLeetcode 207 题目描述:拓扑排序,DFS Python中defaultdict用法 认识defaultdict: 当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错。 defaultdict的作用是在于,当字典里的k

cortye的博客 342

leetcode笔记】Python实现 207. Course Schedule

题目地址: https://leetcode.com/problems/course-schedule/description/ 题目描述: 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 ...

Jack_Kuo的博客 529

LeetCode 207. Course Schedule--有向图找环--面试算法题--DFS递归,拓扑排序迭代--Python

LeetCode 207. Course Schedule–有向图找环–面试算法题–DFS递归,拓扑排序迭代–Python 此文首发于我的个人博客:zhang0peter的个人博客 LeetCode题解文章分类:LeetCode题解文章集合 LeetCode 所有题目总结:LeetCode 所有题目总结 题目地址:Course Schedule - LeetCode There are a ...

个人博客 1666

LEETCODE207-Course Schedule

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

aliceyangxi1987的博客 744

课程表 leetcode C语言,LeetCode #207 Course Schedule 课程表

207 Course Schedule 课程表Description:There are a total of numCourses courses you have to take, labeled from 0 to numCourses-1.Some courses may have prerequisites, for example to take course 0 you have t...

weixin_30079201的博客 244

LeetCode207. Course Schedule 解题报告(Python

作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/course-schedule/description/ 题目描述: There are a total of n courses you have to take, labeled from 0 to ...

负雪明烛 1万+

区块链技术与应用综述.pdf

#资源达人分享计划#

上一篇: Leetcode-518. 零钱兑换 II Coin Change 2 (DP) -超详细python
下一篇: Leetcode-802. 找到最终的安全状态 Find Eventual Safe State (拓扑排序) -python
简米
博客等级 码龄7年 31粉丝 88原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值