课程表系列

相关题目:
207. 课程表
210. 课程表 II
1462. 课程表 IV

class CourseSchedule:"""207.课程表https://leetcode.cn/problems/course-schedule/"""def __init__(self):# 记录⼀次递归堆栈中的节点self.onPath = []# 记录遍历过的节点,防⽌⾛回头路self.visited = []# 记录图中是否有环self.hasCycle = Falsedef buildGraph(self, numCourses: int, prerequisites: List[List[int]]) -> List[List[int]]:# 注意这两种新建对象的区别,前者是传的引用,后者是拷贝一个新的变量# graph = [[]] * numCoursesgraph = [[] for _ in range(numCourses)]for edge in prerequisites:src = edge[1]dst = edge[0]graph[src].append(dst)return graphdef canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:"""dfs:param numCourses::param prerequisites::return:"""graph = self.buildGraph(numCourses, prerequisites)self.visited = [False] * numCoursesself.onPath = [False] * numCoursesfor i in range(numCourses):self.traverse(graph, i)return not self.hasCycledef traverse(self, graph, i):if self.onPath[i]:self.hasCycle = Truereturnif self.visited[i]:returnself.visited[i] = Trueself.onPath[i] = Truefor t in graph[i]:self.traverse(graph, t)self.onPath[i] = Falsedef canFinish2(self, numCourses: int, prerequisites: List[List[int]]) -> bool:"""bfs:param numCourses::param prerequisites::return:"""graph = [[] for _ in range(numCourses)]indegree = [0] * numCoursesfor edge in prerequisites:src = edge[1]dst = edge[0]graph[src].append(dst)indegree[dst] += 1queue = []for i in range(numCourses):if indegree[i] == 0:queue.append(i)visited = 0while queue:cur = queue.pop(0)visited += 1for v in graph[cur]:indegree[v] -= 1if indegree[v] == 0:queue.append(v)# 最后只需要判断已访问的课程数是否等于课程总数即可return visited == numCourses
# 210. 课程表 II
class Solution:def __init__(self):self.hascycle = Falseself.postorder = []def buildGraph(self, numCourses: int, prerequisites: List[List[int]]) -> List[List[int]]:# 注意这两种新建对象的区别,前者是传的引用,后者是拷贝一个新的变量# graph = [[]] * numCoursesgraph = [[] for _ in range(numCourses)]for edge in prerequisites:src = edge[1]dst = edge[0]graph[src].append(dst)return graphdef findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:graph = self.buildGraph(numCourses, prerequisites)self.indegree = [0] * numCourses# 计算入度,和环检测算法相同for edge in prerequisites:dst = edge[0]self.indegree[dst] += 1# 根据入度初始化队列中的节点,和环检测算法相同queue = []for i in range(numCourses):if self.indegree[i] == 0:queue.append(i)res = [0] * numCourses# 记录遍历节点的顺序count = 0while queue:cur = queue.pop(0)# 弹出节点的顺序即为拓扑排序结果res[count] = curcount += 1for neighbor in graph[cur]:self.indegree[neighbor] -= 1if self.indegree[neighbor] == 0:queue.append(neighbor)# 存在环if count != numCourses:return []return res
# 1462. 课程表 IV
class Solution:def checkIfPrerequisite(self, numCourses: int, prerequisites: List[List[int]], queries: List[List[int]]) -> List[bool]:g = [[] for _ in range(numCourses)]indgree = [0] * numCoursesisPre = [[False] * numCourses for _ in range(numCourses)]for p in prerequisites:indgree[p[1]] += 1g[p[0]].append(p[1])q = []# 将入度为0的节点加入队列for i in range(numCourses):if indgree[i] == 0:q.append(i)while q:cur = q.pop(0)for ne in g[cur]:isPre[cur][ne] = Truefor i in range(numCourses):isPre[i][ne] = isPre[i][ne] or isPre[i][cur]indgree[ne] -= 1if indgree[ne] == 0:q.append(ne)res = []for query in queries:res.append(isPre[query[0]][query[1]])return res

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

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

相关文章

LINUX定时解压缩方案

需求背景 对接客户中某个上游为外包系统,外包系统每日推送压缩文件至指定文件夹下,文件格式为YYYYMMDD_RegReport.zip。由于每日采集文件,无法对接压缩包内文件,需要将推送的压缩文件每日解压为文件夹 需求分析 与客户沟通后&a…

Kafka知识补充

如何避免 Rebalance 最简单粗暴的就是 : 减少组成员数量发生变化 每个 Consumer 实例都会定期地向 Coordinator 发送心跳请求,表明它还存活着。如果某个 Consumer 实例不能及时地发送这些心跳请求,Coordinator 就会认为该 Consumer 已经“死…

HarmonyOS 远端状态订阅开发实例

IPC/RPC 提供对远端 Stub 对象状态的订阅机制, 在远端 Stub 对象消亡时,可触发消亡通知告诉本地 Proxy 对象。这种状态通知订阅需要调用特定接口完成,当不再需要订阅时也需要调用特定接口取消。使用这种订阅机制的用户,需要实现消…

Tensorflow2 中对模型进行编译,不同loss函数的选择下输入数据格式需求变化

一、tf2中常用的损失函数介绍 在 TensorFlow 2 中,编译模型时可以选择不同的损失函数来定义模型的目标函数。不同的损失函数适用于不同的问题类型和模型架构。下面是几种常见的损失函数以及它们的作用和适用场景: 1.均方误差(Mean Squared …

C++初阶(1)

W...Y的主页😊 代码仓库分享💕 ​ 🍔前言: 今天我们正式进入C篇章,作为学过C语言的同志,继续学习C肯定就不会进行那些与C语言相同的学习,因为C语言的内容在C中也可以正常使用,所…

通过示例详细了解ES6导入导出模块

通过示例详细了解ES6导入导出模块 似乎许多开发人员认为 ES6 模块只不过是export、import关键字。事实上,它更加多样化。它拥有强大的功能和鲜为人知的问题。在本文中,我们将使用一些示例来了解这些内容。 示例一 // index.mjs import { default } fr…

标准误与聚类稳健标准误的理解

1 标准误 1.1 定义 标准误(Standard Error)是用来衡量统计样本估计量(如均值、回归系数等)与总体参数之间的差异的一种统计量。标准误衡量了样本估计量的变异程度,提供了对总体参数的估计的不确定性的度量。标准误越…

动网格模型算法基础(二)

本贴主要简述动网格模型算法 FLUENT动网格模型能够根据用户指定的边界运动、网络类型和网格再生方式自动地调节内部体网格节点的位置。 一、动网格使用面临的量大问题: 体网格的再生;边界运动或变形的指定; 二、体网格再生方法&#xff1…

flask vue跨域问题

问题: 调试时候跨域访问报: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response. 解决办法: 安装flask_cros from flask_cors import CORS CORS(app) app.after_request def a…

如何避免大语言模型绕过知识库乱答的情况?LlamaIndex 原理与应用简介

本文首发于博客 LLM 应用开发实践 随着 LangChain LLM 方案快速普及,知识问答类应用的开发变得容易,但是面对回答准确度要求较高的场景,则暴露出一些局限性,比如向量查询方式得到的内容不匹配,LLM 对意图识别不准。所…

C++类型推导

这里对C的类型推导方式进行一次全面的总结。 C中有三种类型推导的方式&#xff0c;分别是模板、auto以及decltype()。以下分别介绍这三种方式的同异。 一 模板 假设有这样的函数模板和这样的调用&#xff1a; template<typename T> void f(ParamType param);f(expr);…

【Linux】多线程

文章目录 一.Linux线程概念1.什么是线程2.二级页表3.线程的优点4.线程的缺点5.线程异常6.线程用途 二.Linux进程VS线程1.进程和线程2.进程的多个线程共享3.进程和线程的关系 三.Linux线程控制1.POSIX线程库2.线程创建3.线程等待4.线程终止5.分离线程6.线程ID及进程地址空间布局…

手机拍摄的视频噪点很多怎么办,视频怎么做降噪处理?

现如今&#xff0c;智能手机已经成为了我们生活中必不可少的存在。而随着智能手机越来越强大&#xff0c;很多人已经开始使用手机来拍摄各种类型的视频。但是由于手机的限制&#xff0c;很多人会发现自己拍摄的视频存在着很多的噪点。那么&#xff0c;我们该怎样来解决拍摄视频…

N点复序列求2个N点实序列的快速傅里叶变换

一、方法简介 通过一个点复数序列求出两个点实数序列的离散傅里叶变换&#xff0c;进一步提升快速傅里叶变换的效率。 二、方法详解 和是实数序列&#xff0c;且长度都为&#xff0c;定义复数序列&#xff1a; &#xff0c; 则序列和可表示为&#xff1a; 的离散傅…

端到端的机器学习项目(Machine Learning 研习之六)

使用真实数据 当你在研习机器学习时&#xff0c;最好是使用真实世界中的数据&#xff0c;而不是采用人工数据。巧的是&#xff0c;数以千计的数据集可供选择&#xff0c;涵盖了各种领域。 流行的开放数据存储库&#xff1a; OpenML.orgKaggle.compaperswithcode.com UC Irvin…

MAYA教程之模型的UV拆分与材质介绍

什么是UV 模型制作完成后&#xff0c;需要给模型进行贴图&#xff0c;就需要用到UV功能 UV编译器介绍 打开UI编译器 主菜单有一个 UV->UV编译器&#xff0c;可以点击打开 创建一个模型&#xff0c;可以看到模型默认的UV UV编译器功能使用 UV模式的选择 在UV编译器中…

让测试人头疼的这几件“小事”

对于测试而言&#xff0c;测试之旅充满了有趣的挑战和宝贵的经验教训&#xff0c;良好的测试人懂得通过项目不断总结经验与汲取教训。而成功的产品离不开PD、开发、测试全体项目伙伴的通力合作。但在实际工作中&#xff0c;大家身处的项目往往不随人意&#xff0c;下面我总结下…

洛谷 P1135 奇怪的电梯 P1135 奇怪的电梯

提供两种思路 第一种DFS 超时第九和第十点 import java.util.*; import java.io.*;public class Main{static BufferedReader br new BufferedReader(new InputStreamReader(System.in));static BufferedWriter out new BufferedWriter(new OutputStreamWriter(System.out)…

fastjson 1.2.47 远程命令执行漏洞

fastjson 1.2.47 远程命令执行漏洞 文章目录 fastjson 1.2.47 远程命令执行漏洞1 在线漏洞解读:2 环境搭建3 影响版本&#xff1a;4 漏洞复现4.1 访问页面4.2 bp抓包&#xff0c;修改参数 5 使用插件检测漏洞【FastjsonScan】5.1使用説明5.2 使用方法5.2.1 右键菜单中&#xff…

pycharm中快速对比两个.py文件

在学习一个算法的时候&#xff0c;就想着自己再敲一遍代码&#xff0c;结果最后出现了一个莫名其妙的错误&#xff0c;想跟源文件对比一下到底是在哪除了错&#xff0c;之前我都是大致定位一个一个对比&#xff0c;想起来matlab可以快速查找出两个脚本文件(.m文件)的区别&#…