class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
List<List<Integer>> edges = new ArrayList<>(numCourses);
for (int i = 0; i < numCourses; i++) {
edges.add(new ArrayList<>());
}
int[] inArr = new int[numCourses];
for (int[] p : prerequisites) {
edges.get(p[1]).add(p[0]);
inArr[p[0]]++;
}
ArrayDeque<Integer> Q = new ArrayDeque<>();
for (int i = 0; i < numCourses; i++) {
if (inArr[i] == 0) {
Q.addLast(i);
}
}
int[] result = new int[numCourses];
int index = 0;
while (!Q.isEmpty()) {
int u = Q.removeFirst();
result[index++] = u;
for (Integer v : edges.get(u)) {
inArr[v]--;
if (inArr[v] == 0) {
Q.addLast(v);
}
}
}
if (index != numCourses) {
return new int[0];
}
return result;
}
}
08-27
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交