代码:
- class Solution {
- List
> edges;
- boolean valid = true;
- int[] visited;
- int[] result;
- int index;
- public int[] findOrder(int numCourses, int[][] prerequisites) {
- edges = new ArrayList<>();
- for(int i=0;i
- edges.add(new ArrayList
()); - }
- visited = new int[numCourses];
- result = new int[numCourses];
- index = numCourses - 1;
-
- for(int[] prerequisite:prerequisites){
- edges.get(prerequisite[1]).add(prerequisite[0]);
- }
- for(int i=0;i
- if(visited[i]==0){
- dfs(i);
- }
- }
- if(!valid)return new int[0];
- return result;
- }
- public void dfs(int u){
- visited[u] = 1;
- for(int v:edges.get(u)){
- if(visited[v]==0){
- dfs(v);
- if(!valid)return;
- }else if(visited[v]==1){
- valid = false;
- return;
- }
- }
- visited[u] = 2;
- result[index--] = u;
-
- }
- }
-
相关阅读:
一文吃透 Go 内置 RPC 原理
单片机,0.07
【力扣10天SQL入门】Day2
Scoped和样式穿透
缓存技术使用
Nacos 安装教程(史上最详细保姆级教程)
C语言数组和指针笔试题(四)(一定要看)
docker容器内部安装gcc ffmpeg make
解释 Git 的基本概念和使用方式
【ArcGIS Pro微课1000例】0031:las点云提取(根据范围裁剪点云)
-
原文地址:https://blog.csdn.net/stacey777/article/details/133589424