【每日一题】LeetCode 207. 课程表 TypeScript 你这个学期必须选修numCourses门课程记为0到numCourses - 1。在选修某些课程之前需要一些先修课程。 先修课程按数组prerequisites给出其中prerequisites[i] [ai, bi]表示如果要学习课程ai则必须先学习课程bi。例如先修课程对[0, 1]表示想要学习课程0你需要先完成课程1。请你判断是否可能完成所有课程的学习如果可以返回true否则返回false。示例 1输入numCourses 2, prerequisites [[1,0]]输出true解释总共有 2 门课程。学习课程 1 之前你需要完成课程 0 。这是可能的。示例 2输入numCourses 2, prerequisites [[1,0],[0,1]]输出false解释总共有 2 门课程。学习课程 1 之前你需要先完成​课程 0 并且学习课程 0 之前你还应先完成课程 1 。这是不可能的。提示1 numCourses 20000 prerequisites.length 5000prerequisites[i].length 20 ai, bi numCoursesprerequisites[i]中的所有课程对互不相同function canFinish(numCourses: number, prerequisites: number[][]): boolean { //BFS //1.建一个邻接表记录每门课学完后能解锁哪些课 const graph:number[][] Array.from({length:numCourses},()[]) //2.记录每门课还有多少先修课没学入度 const indegree:number[] new Array(numCourses).fill(0) //3.填表和入度 for(const [a,b] of prerequisites){ //先修b指向a即b学完后才能学a graph[b].push(a) //a多了一个先修要求 indegree[a] } //4.找出所有入度为0的课没有先修要求入队 const queue:number[] [] for(let i0;inumCourses;i){ if(indegree[i]0) queue.push(i) } // 5.开始剥洋葱 let learned 0 //已经学了多少门 while(queue.length0){ const course queue.shift()! //取出一门可以学的课 learned //遍历这门课能解锁的所有后续课 for(const next of graph[course]){ indegree[next]-- //后续课的一个先修课已经完成了 if(indegree[next]0){ //如果后续课的左右先修都完成了它也可以学了 queue.push(next) } } } return learnednumCourses };共勉

相关新闻

最新新闻

如何快速配置OpenCore EFI:智能自动化工具的终极指南

如何快速配置OpenCore EFI:智能自动化工具的终极指南

如何快速配置OpenCore EFI:智能自动化工具的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款革命性的智能O…

2026/7/29 20:39:37
深入AMD Ryzen硬件底层:SMUDebugTool专业调试工具完全指南

深入AMD Ryzen硬件底层:SMUDebugTool专业调试工具完全指南

深入AMD Ryzen硬件底层:SMUDebugTool专业调试工具完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…

2026/7/29 20:39:37
Flutterust常见问题解答:新手入门必知的15个关键问题

Flutterust常见问题解答:新手入门必知的15个关键问题

Flutterust常见问题解答:新手入门必知的15个关键问题 【免费下载链接】flutterust Flutter Rust :heart: 项目地址: https://gitcode.com/gh_mirrors/fl/flutterust Flutterust是一个将Flutter与Rust完美结合的开源项目,它通过Foreign Function…

2026/7/29 20:39:37
Path of Building:流放之路终极离线构筑模拟器完全指南

Path of Building:流放之路终极离线构筑模拟器完全指南

Path of Building:流放之路终极离线构筑模拟器完全指南 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/gh_mirrors/pat/PathOfBuilding 想象一下,当你花费数周时间在《流放之路》中打…

2026/7/29 20:39:37
XiaomiTool V2开发者指南:贡献代码与扩展功能详解

XiaomiTool V2开发者指南:贡献代码与扩展功能详解

XiaomiTool V2开发者指南:贡献代码与扩展功能详解 【免费下载链接】XiaoMiToolV2 XiaomiTool V2 - Modding tool for xiaomi devices 项目地址: https://gitcode.com/gh_mirrors/xia/XiaoMiToolV2 XiaomiTool V2是一款强大的小米设备调制工具,本文…

2026/7/29 20:39:37
轻快图床API全解析:打造个性化图片管理工作流的实用指南

轻快图床API全解析:打造个性化图片管理工作流的实用指南

轻快图床API全解析:打造个性化图片管理工作流的实用指南 【免费下载链接】quickly-picture-bed 轻快图床:使用nestjsvue3.xtsvite开发的在线图床系统,内置功能包括图片上传、图片管理、存储桶管理、相册管理、插件市场、知识库管理、数据统计…

2026/7/29 20:34:37

月新闻