思路:
拓扑排序。
java code:
public class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
int[] indegree = new int[numCourses];
int[] ans = new int[numCourses];
int number = ;
for(int i = ; i < prerequisites.length; ++i) {
indegree[prerequisites[i][]]++;
}
Queue queue = new LinkedList();
for(int i = ; i < numCourses; ++i) {
if(indegree[i] == ) {
queue.add(i);
ans[number++] = i;
}
}
while(!queue.isEmpty()) {
int course_id = Integer.parseInt(queue.poll().toString());
for(int i = ; i < prerequisites.length; ++i) {
if(prerequisites[i][] == course_id) {
indegree[prerequisites[i][]]--;
if(indegree[prerequisites[i][]] == ) {
queue.add(prerequisites[i][]);
ans[number++] = prerequisites[i][];
}
}
}
}
if(number == numCourses) {
return ans;
}else {
return new int[];
}
}
}