clllll  

image

import java.util.ArrayList;
import java.util.Deque;
class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
// 思路: 入度为0的点入队。依次出队的时候。遍历当前点的指向。入度减1,
// 如果入度为0.进队。
// 队列为空了。但是还有点没有入队。那么就是有环。
int[] cnt = new int[numCourses]; // 保存每个点的入度。
// 邻接表实现图
ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
for (int i = 0; i < cnt.length; i++) {
graph.add(new ArrayList<Integer>());
}
for (int i = 0; i < prerequisites.length; i++) {
int from = prerequisites[i][1];
int to = prerequisites[i][0];
graph.get(from).add(to);
cnt[to]++; // 入度+1
}
int[] queue = new int[numCourses]; // 队列
int l = 0;
int r = 0;
// 入度为0的先进队列
for (int i = 0; i < numCourses; i++) {
if (cnt[i] == 0) {
queue[r++] = i;
}
}
int[] ans = new int[numCourses];
int a = 0;
// 依次出队
while (l != r) {
int cur = queue[l++]; // 出队
ans[a++] = cur; // 收集答案
for (int next : graph.get(cur)) {
cnt[next]--; // 入度减一
if (cnt[next] == 0) {
// 入度为0.可以进队
queue[r++] = next;
}
}
}
if (a == numCourses) {
return ans;
}
return new int[] {};
}
}
posted on   llcl  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
 
点击右上角即可分享
微信分享提示