尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
元宝    LeetCode 207. 课程表 Java实现
LeetCode 207. 课程表Course ScheduleJava 实现题目简述一共有“numCourses” 门课程编号“0 ~ numCourses-1”。给定“prerequisites” 数组其中“prerequisites[i] [a, b]” 表示 想学课程 a 必须先学课程 b。判断是否能完成所有课程。本质判断有向图中是否存在环有环则无法完成。思路拓扑排序BFS / Kahn 算法核心思想统计每门课的入度有多少先修依赖把所有入度为 0 的课入队不依赖任何课的课逐个出队学完该课后把它指向的课的入度减 1如果某门课入度变为 0加入队列最终学完的课数 总课数则无环可以学完Java 实现class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {// 入度数组indegree[i] 表示学课程 i 前需要先学的课程数int[] indegree new int[numCourses];// 邻接表graph[i] 存的是学了课程 i 之后可以学的课程列表ListList graph new ArrayList();for (int i 0; i numCourses; i) {graph.add(new ArrayList());}// 构建图和入度 for (int[] pre : prerequisites) { int course pre[0]; // 想学的课 int need pre[1]; // 先修的课 graph.get(need).add(course); indegree[course]; } // 把所有入度为 0 的课加入队列 QueueInteger queue new LinkedList(); for (int i 0; i numCourses; i) { if (indegree[i] 0) { queue.offer(i); } } int finished 0; // 已学完的课数 while (!queue.isEmpty()) { int curr queue.poll(); finished; // 学完 curr它指向的所有课的入度减 1 for (int next : graph.get(curr)) { indegree[next]--; if (indegree[next] 0) { queue.offer(next); } } } // 全部学完说明无环 return finished numCourses; }}复杂度分析维度 复杂度时间 O(V E)V 为课程数E 为先修关系数空间 O(V E)邻接表 入度数组示例说明输入: numCourses 4, prerequisites [[1,0],[2,0],[3,1],[3,2]]输出: true解释: 合理顺序如 0 → 1 → 2 → 3或 0 → 2 → 1 → 3输入: numCourses 2, prerequisites [[1,0],[0,1]]输出: false解释: 0 依赖 11 依赖 0形成环无法完成常见坑点入度含义别搞反“[a, b]” 是 a 依赖 b所以 b 指向 aa 的入度 1邻接表存的是学完某课后能学的课方向别存反“finished numCourses” 是判断无环的关键不用人为计数边数延伸DFS 三色标记法 也能判环白/灰/黑思路和 BFS 等价如果题目问 输出一个合法的修课顺序那就是 LeetCode 210. 课程表 II只需把“finished” 换成记录顺序的数组即可需要我补充 DFS 判环版 或 LeetCode 210 输出拓扑排序 的 Java 实现吗
RELATED

相关推荐

MyBatis 小知识点

MyBatis 小知识点

配置文件environment 这个标签可以配置不同的环境 比如说开发、生产、测试usermapper中这个是可以替换的在配置文件中环境上面加上,也就是扫描,扫描之后 resultType不需要再写包名,也不区分大小写,直接写user即可实体类和数据库…

📅 2026/10/2 13:55:36
元宝    LeetCode 209. 长度最小的子数组 Java实现

元宝 LeetCode 209. 长度最小的子数组 Java实现

LeetCode 209. 长度最小的子数组 Java 实现 题目简述 给定一个正整数数组 “nums” 和目标值 “target”,找出和 ≥ target 的连续子数组中长度最小的那个,返回其长度。如果不存在,返回 0。 思路:滑动窗口(双指针&…

📅 2026/10/2 13:55:36
短视频链接解析实战:从MD5签名到Python爬虫实现

短视频链接解析实战:从MD5签名到Python爬虫实现

做短视频链接解析接口,听起来像是个挺小众的需求,但真正写起来,你会发现它几乎涵盖了爬虫入门到进阶的所有经典要素:链接处理、正则提取、参数拼接、MD5签名、请求伪造、异常兜底。我最早接触这个案例的时候,纯粹是因为…

📅 2026/10/2 13:50:36
MORE NEWS

更多资讯

📰

Trae 连接 orangepi 失败排查记录:Remote-SSH exit code 1001 与 TaoToken 配置实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Agent工程三层架构:Harness、Loop与Graph生产实战解析

先说个事:去年我接了一个内部的Agent项目,需求听起来特别简单:“让AI自动把工单分类、答复、升级。”原型一周就跑通了,但真到了上线阶段,麻烦全冒出来了:模型偶尔不按约定输出、某个工具插件一崩整个进程直…

📰

平行互质虚拟阵列二维DOA联合估计:低复杂度SVD-ESPRIT实现与避坑指南

简介:这份资源是一篇聚焦阵列信号处理方向的算法研究文档,面向通信、雷达、医学成像等领域的研究生与工程技术人员,针对传统二维DOA估计计算复杂度高、精度不足、易失配等问题,提出基于平行互质虚拟阵列的低复杂度联合估计算法。文…

📰

FACT模型:用细粒度跨变量卷积解决多变量时序预测的动态交互难题

做过多变量时间序列预测的朋友,八成都有过这种体验:明明每个单变量单独建模都还不错,一放到多变量场景里,结果就变得很飘。问题往往不在时序建模本身,而在于变量之间的关系没被处理好。气象站里温度、湿度、气压互相影…

📰

Agent决策中枢:Laya与Jev轻量级判断器实战指南

1. “判断器”不是加个模块,而是给 Agent 装上决策中枢最近在好几个技术群里被反复问到:“Laya 和 Jev 到底是什么?是不是又出了两个新模型?”“Agent 加个‘判断器’听起来很酷,但到底加在哪?加了就能变聪…

📰

直播推广出价算法如何轻量化?阿里妈妈KDD‘25动态校准方案解析

直播推广出价这个事情,圈内人应该都清楚,它跟传统的搜索广告、信息流广告完全不是一回事。传统广告出价,核心是预估点击率、转化率,然后算出一个合理的竞价价格,逻辑相对线性。但直播不一样,用户从点击进入…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬