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