public int[] findOrder(int numCourses, int[][] prerequisites) {
int[] res = new int[numCourses];
Queue<Integer> q = new LinkedList<>();
int[] indegree = new int[numCourses];
int index = 0;
for (int i = 0; i < prerequisites.length; i++) {
indegree[prerequisites[i][0]]++;
}
for (int i = 0; i < indegree.length; i++) {
if (indegree[i] == 0) {
q.offer(i);
}
}
int visit = 0;
while (!q.isEmpty()) {
int tmp = q.poll();
res[index++] = tmp;
visit++;
for (int i = 0; i < prerequisites.length; i++) {
if (tmp == prerequisites[i][1]){
indegree[prerequisites[i][0]]--;
if (indegree[prerequisites[i][0]] == 0)
q.offer(prerequisites[i][0]);
}
}
}
if (visit == numCourses) {
return res;
} else {
return new int[0];
}
}