当前位置: 首页 > news >正文

2023-09-10 LeetCode每日一题(课程表 II)

2023-09-10每日一题

一、题目编号

210. 课程表 II

二、题目链接

点击跳转到题目位置

三、题目描述

现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。

例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1] 。
返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组

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

  • 1 <= numCourses <= 2000
  • 0 <= prerequisites.length <= numCourses * (numCourses - 1)
  • prerequisites[i].length == 2
  • 0 <= ai, bi < numCourses
  • ai != bi
  • 所有[ai, bi] 互不相同

四、解题代码

class Solution {
public:#define maxn 100010vector<int> Edges[maxn];int hash[maxn];int deg[maxn];void addEdge(int u,int v){Edges[u].push_back(v);deg[v]++;}vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {memset(hash,0,sizeof(hash));memset(deg,0,sizeof(deg));int length=prerequisites.size();for(int i=0;i<length;i++){Edges[i].clear();hash[i]=0;}for(int i=0;i<length;i++){addEdge(prerequisites[i][1],prerequisites[i][0]);}queue<int> q;vector<int> res;int x=0;for(int i=0;i<numCourses;i++){if(deg[i]==0){x++;q.push(i);hash[i]=1;res.push_back(i);}}vector<int> path;while(!q.empty()){int u=q.front();q.pop();for(int i=0;i<Edges[u].size();i++){deg[Edges[u][i]]--;if(deg[Edges[u][i]]==0 && hash[Edges[u][i]]==0){q.push(Edges[u][i]);hash[Edges[u][i]]=1;res.push_back(Edges[u][i]);x++;}}}if(x==numCourses){return res;}return path;}
};

五、解题思路

(1) 依然是一道拓扑排序的经典题目。

http://www.lryc.cn/news/162133.html

相关文章:

  • 合并区间【贪心算法】
  • 2023,软件测试人的未来在哪里?
  • Python中的Numpy向量计算(R与Python系列第三篇)
  • LeetCode刷题笔记【27】:贪心算法专题-5(无重叠区间、划分字母区间、合并区间)
  • nvidia-smi 命令详解
  • fork()函数的返回值
  • Stable Diffusion WebUI挂VPN不能跑图解决办法(Windows)
  • Android的本地数据
  • android NDK 开发包,网盘下载,不限速
  • 【每日一题Day320】LC2651计算列车到站时间 | 数学
  • C语言柔性数组详解:让你的程序更灵活
  • Redis-带你深入学习数据类型list
  • react拖拽依赖库react-dnd
  • win10环境安装使用docker-maxwell
  • Docker部署RabbitMQ
  • 23个react常见问题
  • 【python基础】——Anaconda下包更新的坑及安装与卸载、及安装后Jupyter Notebook没反应的解决方法
  • CSS 中的 display 和 visibility
  • 解决mysql报错this is incompatible with DISTINCT
  • C++-map和set
  • 微信小程序AI类目-深度合成-AI问答/AI绘画 互联网信息服务算法备案审核通过教程
  • 蓝桥杯官网练习题(星期一)
  • centos7更新podman
  • Java特性之设计模式【抽象工厂模式】
  • 机器学习简介
  • linux之perf(2)list事件
  • 将多个EXCEL 合并一个EXCEL多个sheet
  • 【送书活动】揭秘分布式文件系统大规模元数据管理机制——以Alluxio文件系统为例
  • 微信小程序——数据绑定
  • libbpf-bootstrap安卓aarch64适配交叉编译