拓扑排序!!
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
List<List<Integer>> edges = new ArrayList<>();
for(int i = 0;i < numCourses;i++){
edges.add(new ArrayList<Integer>());
}
int[] degree = new int[numCourses];
for(int[] info : prerequisites){
edges.get(info[1]).add(info[0]);
degree[info[0]]++;
}
Deque<Integer> queue = new LinkedList<>();
for(int i = 0;i < degree.length;i++){
if(degree[i] == 0){
queue.add(i);
}
}
int visited = 0;
while(!queue.isEmpty()){
int u = queue.poll();
visited++;
for(int v : edges.get(u)){
degree[v]--;
if(degree[v] == 0){
queue.offer(v);
}
}
}
return visited == numCourses;
}
}