Course Schedule
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
if (prerequisites == null || prerequisites.length == 0 || numCourses == 0) {
return true;
}
int[] inDegree = getInDegree(numCourses, prerequisites);
Map<Integer, List<Integer>> dependencies = getDependencies(prerequisites);
int selectedCourse = 0;
Queue<Integer> queue = new ArrayDeque<>();
for (int i = 0; i < inDegree.length; i++) {
if (inDegree[i] == 0) {
queue.offer(i);
}
}
while (!queue.isEmpty()) {
int course = queue.poll();
selectedCourse++;
if (!dependencies.containsKey(course)) {
continue;
}
for (int related : dependencies.get(course)) {
inDegree[related]--;
if (inDegree[related] == 0) {
queue.offer(related);
}
}
}
return selectedCourse == numCourses;
}
private int[] getInDegree(int numCourses, int[][] prerequisites) {
int[] inDegree = new int[numCourses];
for (int[] prerequisite : prerequisites) {
inDegree[prerequisite[0]]++;
}
return inDegree;
}
private Map<Integer, List<Integer>> getDependencies(int[][] prerequisites) {
Map<Integer, List<Integer>> dependencies = new HashMap<>();
for (int[] prerequisite : prerequisites) {
dependencies.putIfAbsent(prerequisite[1], new ArrayList<>());
dependencies.get(prerequisite[1]).add(prerequisite[0]);
}
return dependencies;
}
}

最后更新于
这有帮助吗?