广度优先搜索
class Solution {
public int[] findOrder(int numCourses, int[][] prerequisites) {
int[] result=new int[numCourses];
int[] input=new int[numCourses];
int index=0;
Queue<Integer>que=new LinkedList<>();
for(int[]temp:prerequisites){
input[temp[0]]++;
}
for(int i=0;i<numCourses;i++){
if(input[i]==0){
que.add(i);
}
}
while(!que.isEmpty()){
int node=que.poll();
result[index++]=node;
for(int[]temp:prerequisites){
if(temp[1]==node){
input[temp[0]]--;
if(input[temp[0]]==0){
que.add(temp[0]);
}
}
}
}
if(index!=numCourses){
return new int[0];
}
return result;
}
}
|