算法-Course Schedule-课程表

课程表-算法设计 从今天开始 接下来的几个月 里我都在这里分享leecode解题思路和蓝桥杯历届试题的解题思路 。。。 第一天先看一个dfs的题目 : 现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习? 示例 1: 输... 阅读详情

1、题目描述

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

2、题目分析

  • 修一门课之前需要满足这门课的先修课程已经修完

  • 每次先修完哪些课程呢?第一个肯定是没有先修课程的那个,之后选出先修课程已修完的

  • 如何表示课程之间的关系呢?使用有向图,[0,1]表示0的先修课程是1,那么1->0就表示这俩的关系,0有个入度为1

  • 如果图中有环则该环的节点都不能取,只有当节点的入度==0的时候才能取这个点,之后相关的节点入度-1

  • 拓扑排序:对DAG的顶点进行排序,使得每条有向边(u,v),在排序记录中u比v先出现

    1、统计每个节点的入度生成入度表indegrees

    2、将所有入度为0的点入队,队列非空时依次出队

    ​ --将此节点pre的所有邻接节点的入度-1,indegrees[cur] -= 1;

    ​ --入度=0的节点入队

    ​ --每当由pre节点出队时,numCourses–

3、代码实现

 public boolean canFinish(int numCourses, int[][] prerequisites){
     int[] indegress = new int [numCourses];//入度表
     List<List<Integer>> list = new ArrayList<>();//邻接表
     for(int i = 0;i < numCourses;i++){
         list.add(new ArrayList<>());
     }
     for(int[] prerequisite : prerequisites){
         indegress[prerequisite[0]]++;//该顶点的入度+1
         list.get(prerequisite[1]).add(prerequisite[0]);//记录该顶点指向的所有节点
     }
     Queue<Integer> queue = new LinkedList<>();
     for(int i = 0;i < numCourses;i++){//0度顶点入列
         if(indegress[i] == 0) queue.add(i);
     }
     while(!queue.isEmpty()){
         int pre = queue.poll();
         numCourses--;
         for(int cur : list.get(pre)){//该顶点的后驱顶点入度-1
             indegress[cur]--;
             if(indegress[cur] == 0) queue.add(cur);
         }

     }
     return numCourses == 0;
 }

4、复杂度分析

  • 时间复杂度:O(N + M),其中N为课程数,M为先修课程的要求数。这其实就是对图进行广度优先搜索的时间复杂度。
  • 空间复杂度:O(N + M)
【数据结构与算法】之深入解析“课程表”的求解思路与算法示例 一、题目要求 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1,在选修某些课程之前需要一些先修课程,先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则必须先学习课程 bi。 例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1,请你判断是否可能完成所有课程的学习?如果可以,返回 true;否则,返回 false。 示例 1: 输入:numCo 阅读详情

相关推荐

别让课程表变成“死锁现场”:算法大牛带你彻底吃透 Course Schedule

《课程表问题:从算法到人生的依赖管理》 摘要:课程表问题本质上是一个有向图环检测问题,反映了现实中的依赖管理挑战。本文通过两种算法深入解析:DFS采用"访问状态标记"检测回路,而BFS则模拟现实的"逐步消解前置条件"过程。该问题广泛应用于软件构建、微服务启动等场景,其核心思想——管理依赖关系并避免死锁——也隐喻着人生发展。正如算法所示,解决循环依赖需要识别关键路径,这与我们需要在人生中找到突破点、建立正向循环异曲同工。课程表问题教会我们的不仅是算法技巧,更是一种解决问

Echo_Wish 65

LeetCode 207.课程表

你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1] 给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习? class Solution { public: vector<int> visit; bool dfs(int v,vector<vector<int>>& g)

qq_45008831的博客 228

C++实战:基于ONNX Runtime与OpenCV部署XFeat图像匹配模型

本文详细介绍了在C++环境中,利用ONNX Runtime与OpenCV高效部署XFeat图像匹配模型的完整流程。内容涵盖环境搭建、模型转换、核心代码封装及可视化实现,旨在帮助开发者将这一先进的深度学习模型集成到对性能要求苛刻的工业或嵌入式应用中,实现鲁棒且快速的特征匹配。

gpu4optimizer的博客 522

力扣:207.课程表——拓扑排序算法

力扣:207.课程表——拓扑排序算法 1. 题目描述 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。 例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。 请你判断是否可能完成所有课程的学习?如果可以,返回 true ;

meraki的博客 1478

Arduino--土壤湿度传感器使用(电阻式)

最近买了一个土壤湿度检测传感器,实物图是这样的: 我买这个模块是想要得到土壤湿度的模拟量。但我买的时候忘了买左边的蓝色模块,我开始以为这个模块是有运放功能的,但实际它是一个电压比较器和一个分压电路。 其模块的接线如图: 该模块的四线是带模拟量输出的,三线的只输出一个到达阈值的标志量。该模块的原理图如下: 该模块的测试原理为:把土壤当成一个可变电阻,随着土壤含水量的增加,土壤电阻减小。而该传感器其实就是两个电极,用来接土壤这个可变电阻。一般湿度的土壤电阻大概在几百K左右,其串连的分压电阻应该在这个数量级。

weixin_41866783的博客 1万+

青龙人形机器人硬件平台设计全解析:从构型到控制系统的实战指南

本文深度解析了青龙人形机器人硬件平台的设计全流程,从需求分析、构型设计到核心系统实现。文章详细阐述了其43个自由度的仿生构型、高动态性下肢设计、灵巧作业系统以及分布式控制架构,并探讨了旋转关节与直线关节等关键技术选型,为开发者提供了从理论到实践的完整硬件设计指南。

weixin_29248313的博客 381

算法---课程表(拓扑排序)

1.Kotlin list + index 会返回新的list 并不会在当前list 添加2.对于边增加边删除 建议考虑queue 或者stack 防止ConcurrentModificationException只有一边遍历 一边删除 才可以用iterator而且iterator 接口都没有add 方法还不清楚吗?不想想为什么吗?

男儿不展风云志,空有天生八尺躯 1050

Android PMS——概述(一)

PMS(Package Manager Service)是 Android 操作系统的一个重要组件,它负责管理应用程序的包信息以及与应用程序的安装、卸载、权限控制等相关功能,确保应用程序的安全性和稳定性。 Android PMS 负责维护一个应用程序包的清单信息,该清单是一个 XML 文件,包含应用程序的各种元数据,例如应用程序的包名、版本号、权限要求、组件信息等。PMS通过访问该清单文件来获取应用程序的信息。 此外,Android PMS 还负责应用程序的安装和卸载。在安装应用

小旭的专栏 1664

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 a p

mawu_1014的博客 276

14、X射线图像处理与特征提取全解析

本文全面解析了X射线图像处理与特征提取的关键技术,涵盖图像预处理、滤波、边缘检测、分割与恢复等流程,并深入探讨了几何特征(如面积、周长、圆度、椭圆拟合)、强度特征(均值、方差、对比度)、傅里叶描述符、不变矩(Hu矩、Gupta矩)以及局部描述符(SIFT、SURF)和稀疏表示方法。同时介绍了特征选择的过滤法、包装法和嵌入法,并结合Matlab代码示例展示了各类特征的实际提取过程。文章最后总结了当前技术的应用现状,并展望了深度学习在X射线图像分析中的未来潜力。

pz89012345的博客 133

基于C++和Qt开发IEC104规约主站调试软件(第二章)

本章节主要讲解iec104主站软件界面设计和从站的连接功能以及部分功能代码的展示。

半青年的博客 858

Leetcode 207.课程表(Course Schedule)

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

qq_39378221的博客 587

Android Google 支付接入

1. 从 2023 年 8 月 2 日起,所有新应用都必须使用结算库版本 5 或更高版本。自 2023 年 11 月 1 日起,现有应用的所有新版本都必须使用结算库版本 5 或更高版本。 2. 如果您的应用以 Android 14 或更高版本为目标平台,您必须更新到 PBL 5.2.1 或 PBL 6.0.1 或更高版本。

帅次的博客 9404

LeetCode—207.课程表(Course Schedule)——分析及代码(C++)

LeetCode—207.课程表[Course Schedule]——分析及代码[C++] 一、题目 二、分析及代码 1. 广度优先搜索 (1)思路 (2)代码 (3)结果 2. 深度优先搜索 (1)思路 (2)代码 (3)结果 三、其他 一、题目 现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习? 示例 1

江南土豆的博客 911

YOLO26优化:注意力魔改 | 用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测,暴力涨点

用于微小目标检测的上下文增强和特征细化网络ContextAggregation,助力小目标检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 487

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LeetCode207. Course Schedule课程表

LeetCode207. Course Schedule课程表原题链接 Key: 非常淳朴的拓扑排序 题意是:某些课程在修读之前需要完成其先修课程,给出所有课程之间的关系,判断是否能完成修读所有课程 那么就是判断这个课程关系图是否是拓扑图,没什么特别的地方,只需要用个淳朴的拓扑排序即可。 以前做过一道题意一毛一样的:HihoCoder-1174 以后兴趣的可以看一眼 class Solution ...

KenKing酱的呆呆博客 270

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Leetcode 每日一题:Course Schedule II

Google 高频面试题 Leetcode 210: Course Schedule II 详解

2401_85421495的博客 1155

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python每日一练(20230505) 课程表 Course Schedule III/IV

3. 课程表 Course Schedule III   4. 课程表 Course Schedule IV

汉阳Hann's Home 1677

Golang每日一练(leetDay0072) 课程表 I\II Course Schedule

207. 课程表 Course Schedule I🌟🌟   210. 课程表 Course Schedule II🌟🌟

汉阳Hann's Home 1079

【LeetCode 面试经典150题】207. Course Schedule 课程表

There are a total of courses you have to take, labeled from 0 to . You are given an array where indicates that you must take course first if you want to take course .For example, the pair , indicates that to take course 0 you have to first take course

qq_43513394的博客 540

LeetCode //C - 630. Course Schedule III

【代码】LeetCode //C - 630. Course Schedule III。

Made in Code 1758

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

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

qq_39378221的博客 289

[LeetCode]207. Course Schedule 课程表

原题大致意思是有从编号0到n-1的课程,输入一个二维数组,表示两两课程之间的前置关系,[0, 1]表示必须修完1号课程才能修0号课程。问题是给定一个课程的前置关系,让我们判断这个关系是否合理。(如[[0,1], [1,0]]即为矛盾的课程关系)稍微想一下,我们就可以想出来可以用一个图来表示课程之间的前置关系。这道题是拓扑排序的典型应用。

玄学实验室 3162

Leetcode 210 Course Schedule II 课程表II

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

(ง •̀_•́)ง 2317

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

【小白爬Leetcode207】5.5 课程表 Course Schedule

【小白爬Leetcode207】5.5 课程表 Course Schedule题目Discription中文描述解析思路一 DFS 有向图(标记访问状态)思路二 BFS 有向图(入度) Leetcode207 medium\color{#FF4500}{medium}medium 点击进入原题链接:Leetcode207 课程表 Course Schedule 题目 Discription There are a total of numCoursescourses you have to take

weixin_41604040的博客 242
上一篇: MySQL-InnoDB行锁算法-三种详解
下一篇: MySQL-超大分页处理-开发角度
酱油瓶啤酒杯
博客等级 码龄8年 35粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值