Course Schedule II
public class Solution {
/*
* @param numCourses: a total of n courses
* @param prerequisites: a list of prerequisite pairs
* @return: the course order
*/
public int[] findOrder(int numCourses, int[][] prerequisites) {
// write your code here
int[] result = new int[numCourses];
Map<Integer, Set<Integer>> map = new HashMap<>();
int[] degree = new int[numCourses];
for (int [] p : prerequisites) {
if (!map.containsKey(p[1]) || !map.get(p[1]).contains(p[0])) {
degree[p[0]]++;
}
map.putIfAbsent(p[1], new HashSet<>());
map.get(p[1]).add(p[0]);
}
Queue<Integer> queue = new ArrayDeque<>();
for (int i = 0; i < numCourses; i++) {
if (degree[i] == 0) {
queue.offer(i);
}
// System.out.println(degree[i]);
}
int i = 0;
while (!queue.isEmpty()) {
int current = queue.poll();
result[i] = current;
i++;
if (!map.containsKey(current)) {
continue;
}
for (int course : map.get(current)) {
degree[course]--;
if (degree[course] == 0) {
queue.offer(course);
}
}
}
// System.out.println(unSelected);
return i == numCourses ? result : new int[0];
}
}

最后更新于
这有帮助吗?