题目链接
207. 课程表
思路
参考Krahets大佬的思路
代码
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
int[] indegrees = new int[numCourses];
List<List<Integer>> adjacency = new ArrayList<>();
Queue<Integer> queue = new LinkedList<>();
for(int i = 0; i < numCourses; i++){
adjacency.add(new ArrayList<>());
}
// Get the indegree and adjacency of every course.
// index 1 -> index 0
for(int[] cp : prerequisites){
indegrees[cp[0]]++;
adjacency.get(cp[1]).add(cp[0]);
}
// Get all the courses with the indegree of 0.
for(int i = 0; i < numCourses; i++){
if(indegrees[i] == 0){
queue.add(i);
}
}
while(!queue.isEmpty()){
int pre = queue.poll();
numCourses--;
for(int cur : adjacency.get(pre)){
indegrees[cur]--;
if(indegrees[cur] == 0){
queue.add(cur);
}
}
}
return numCourses == 0;
}
}
拓展
【拓扑排序】LeetCode 210. 课程表 II