LeetCode 热题 HOT 100 (009/100)【宇宙最简单版】

【图论】No. 0207 课程表【中等】👉力扣对应题目指路

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【力扣详解】谢谢你的支持!

题目描述:你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1

在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi

  • 请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false

  • 示例 :

    输入:numCourses = 2, prerequisites = [[1,0]]
    输出:true
    解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的

  • 课程拓扑图示例:

🔥 思路:从不需要先修课程的课程 C 进行学习,逐步迭代拓扑图,直至所有课程都被进行学习

  • 进行学习:从拓扑图中移除课程 C,且去掉 C 为先修课程的要求
    • 以 C=C1为例:移除 C1,且去掉 C1 指向其他的有向边 C1 →C3, C1 →C8
  • 逐步迭代-每步选择一个不需要先修课程 (即没有指向 →C 的有向边) 的课程 C
    • 如果图中课程节点均不符合要求,说明不可能学完所有课程 (存在环路)
  • 如果所有课程都被进行学习(图中节点均被移除)了,说明可以学完所有课程

参考如上思路,给出详细步骤如下:

  • 步骤一⭐创建 graph = [n1, n2, …]: 列表,包含 numCourses 个课程节点,每个课程C对应的节点 n 包含
    • 入度n[0]:有多少先修课程 →C,即需求列表prerequisitesaiC 的需求个数
    • 出度n[1] 列表:有多少先修课程 C→,即需求列表prerequisitesbiC 的所有 ai
      • 记录 C→ 的后续课程 ,方便去掉 C 为先修课程的要求: 所以记录所有 ai 而非仅个数
  • 步骤二⭐创建初始 to_learn 列表:保存目前拓扑图中剩余的课程
    • 逐步迭代时从 to_learn 中找寻下一个符合要求的课程 C
  • 步骤三⭐开始逐步迭代拓扑图 graph
    • 如果所有课程都被进行学习(to_learn 为空)了,返回 True
    • 找到下一个满足条件的课程 C进行学习
    • 如果上步找不到 C,说明不可能学完所有课程 (存在环路),返回 False
 class Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:graph = [[0, []] for _ in range(numCourses)]  # ------------- step 1for [ai, bi] in prerequisites:graph[ai][0] += 1graph[bi][1].append(ai)to_learn = [_ for _ in range(numCourses)]  # ---------------- step 2def find_Course():for C in to_learn:  # 从 to_learn 中找寻if graph[C][0] == 0:  		## 找到啦,开始进行学习to_learn.remove(C)  	## 移除 Cfor _ in graph[C][1]:  	## 处理所有 C→graph[_][0] -= 1return C  				## 返回符合要求的课程 Creturn None  					## 均不符合要求:不可能学完所有课程 (存在环路)while True:  # --------------------------------------------- step 3if not to_learn: return True  # ---------------------- step 3.1C = find_Course()  # --------------------------------- step 3.2if C==None : return False  # ------------------------- step 3.3

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【力扣详解】谢谢你的支持!
🔥 LeetCode 热题 HOT 100

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

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

相关文章

小公司怎么申请企业邮箱?

小公司申请企业邮箱需要考虑哪些因素?小公司选择企业邮箱需考虑成本、功能、安全、支持等因素。小公司怎么申请企业邮箱呢?注册企业邮箱需填写企业信息、选择套餐并添加用户。 一、小公司申请企业邮箱考虑的因素 1、成本效益分析 预算规划&#xff1a…

Try ubuntu core (by quqi99)

作者:张华 发表于:2024-07-20 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) try ubuntu core on qemu #ovmf is to ensure compatibility with the re…

Rust编程-高级特性

unsafe:内存不安全 内存安全问题,例如空指针解引用 关键字unsafe来切换到不安全模式,并在被标记后的代码块中使用不安全代码 使用unsafe告诉编译器后面代码安全性自行负责 因为电脑硬件安全问题,必须编写可能不安全的代码 可以将…

matlab--legend利用for循环添加图例

第一种方法 %% 第一种方法 R 1:4; THETA1 atand(R./1.8); legend_name {}; for i 1:4THETA atand(R(i)./1.8);intTheta floor(THETA);R_THERA 1.8 - (R(i)./tand(intTheta-10:intTheta10));R_THERA1 1.8 - (R(i)/tand(intTheta));plot(R_THERA);grid on;hold onlegend…

在字符串的 格式化 与 反格式化 中用到的 模块 和 方法

目录 一,Open函数使用 二,Json与pickle 一,json模块 1. 将 Python 对象转换为 JSON 字符串 2. 将 JSON 字符串解析为 Python 对象 3. 读取和写入 JSON 文件 4. 处理 JSON 中的特殊数据类型 5. 错误处理 二,pikel模块 1. …

领夹麦克风哪个品牌好,电脑麦克风哪个品牌好,热门麦克风推荐

​在信息快速传播的时代,直播和视频创作成为了表达与交流的重要方式。对于追求卓越声音品质的创作者而言,一款性能卓越的无线麦克风宛如一把利剑。接下来,我要为大家介绍几款备受好评的无线麦克风,这些都是我在实际使用中体验良好…

淘客返利系统中的服务发现与注册机制详解

淘客返利系统中的服务发现与注册机制详解 大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在本文中,我们将深入探讨淘客返利系统中的服务发现与注册机制,并结合Java代码进行详细…

【Linux常用命令】之sed命令

Linux常用命令之sed命令 文章目录 Linux常用命令之sed命令常用命令之sed背景介绍 总结 作者简介 听雨:一名在一线从事多年研发的程序员,从事网站后台开发,熟悉java技术栈,对前端技术也有研究,同时也是一名骑行爱好者。…

SpringBoot大模型流式接口

话不多说,直接上货 import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONObject; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.Re…

人工智能(AI)在办公场所的广泛应用

人工智能(AI)在办公场所的广泛应用正逐步改变着我们的工作方式和效率。随着技术的进步,越来越多的公司和组织开始采用各种AI技术来优化工作流程、提升生产力,并提供更好的用户体验。以下是人工智能在办公方面的一些主要作用和影响…

linux学习笔记整理: 关于linux:nginx服务器 2024/7/20;

nginx服务器: 自理解: nginx是一种分发式服务器,统一进入的接口,并将进入的用户进行指定性分发给不同服务器地址交互; Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内…

Java 如何获取一个 class 的所有属性和方法

👆🏻👆🏻👆🏻关注博主,让你的代码变得更加优雅。 前言 Hutool 是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率&#xf…

LeetCode 125.验证回文串 C++写法

LeetCode 125.验证回文串 C写法 思路🤔: 我们不对字符串进行删除,这样效率太低了,所以可以左右开工,下标begin和end遇到不是字母数字字符的就跳过,当两边都是字母就进行比对,一样就继续往后走&a…

sqlserver 跨服务器进行数据增删改查

--连接远程服务器 exec sp_addlinkedserver 目标服务器名(自定义取名), , SQLOLEDB , 192.168.180.18(目标服务器IP) --登录远程服务器 exec sp_addlinkedsrvlogin 目标服务器名, false ,null, (用户名&#xff09…

PCL 批量处理点云文件

系列文章目录 文章目录 系列文章目录前言一、PCL是什么?二、配置PCL环境三、使用步骤1.引入库2.主函数 总结 前言 点云处理时往往会需要对多个点云进行处理,比如在预处理,保存点云时。下面提供一个简单的点云批量转换例子,PCD文件…

Midjourney绘画提示词精选

Midjourney绘画提示词精选 在探索Midjourney这一强大的AI绘画工具时,选择合适的提示词是创作出令人惊艳作品的关键。这些提示词不仅能够帮助Midjourney理解你的创作意图,还能引导它生成出符合你期望的图像。以下是对Midjourney绘画提示词的精选与解析&a…

power bi 度量值相关函数

power bi 度量值相关函数 1. 度量值的好处2. 度量值上下文3. calculate() 函数4. 度量值存储方式 1. 度量值的好处 度量值不会增加一列,不会修改表格度量值自带筛选功能 2. 度量值上下文 新建行和新建度量值的区别 度量值是筛选上下文:度量值天生具有…

机器学习 | 阿里云安全恶意程序检测

目录 一、数据探索1.1 数据说明1.2 训练集数据探索1.2.1 数据特征类型1.2.2 数据分布1.2.3 缺失值1.2.4 异常值1.2.5 标签分布探索 1.3 测试集探索1.3.1 数据信息1.3.2 缺失值1.3.3 数据分布1.3.4 异常值 1.4 数据集联合分析1.4.1 file_id 分析1.4.2 API 分析 二、特征工程与基…

SimGCL和XSimGCL

SimGCL 动机 传统的SGL(图自监督学习)使得模型可以自行发掘任务特征,解决了数据稀疏和长尾分布的问题,SGL采用节点dropout、边dropout和随机游走三种方式对图结构进行扰动(图增强)进行对比学习,可以有效提高性能 SGL主要解决传统推荐系统面临的数据稀疏和长尾分布问题。…

k8s中pod创建过程

1,客户端向apiserver发起一个create pod请求 2,apiserver接收到pod创建请求后,生成一个包含创建信息的yaml 3,apiserver将yaml信息写入etcd数据库 4,根据scheduler调度器为pod分配node主机 5,node kubelet检…