210.Course Schedule II (M)
https://leetcode.com/problems/course-schedule-ii/
1.Description(Medium)
2.Code
Version 1: BFS
public int[] findOrder(int numCourses, int[][] prerequisites) {
//Initial the adjacency list
List<ArrayList<Integer>> adjacencyList=new ArrayList<ArrayList<Integer>>();
for(int i=0;i<numCourses;i++){
adjacencyList.add(new ArrayList<Integer>());
}
//Create the indegree array
int[] indegree=new int[numCourses];
//Fill the adjacencyList
for(int i=0;i<prerequisites.length;i++){
int a=prerequisites[i][1];
int b=prerequisites[i][0];
adjacencyList.get(a).add(b);
indegree[b]++;
}
//Initial the queue and push in=0 into queue
Queue<Integer> queue=new LinkedList<Integer>();
for(int i=0;i<numCourses;i++){
if(indegree[i]==0){
queue.offer(i);
}
}
int [] result=new int[numCourses];
//count is for identifying index of node
int index=0;
while(!queue.isEmpty()){
int current=queue.poll();
result[index]=current;
index++;
for(Integer node: adjacencyList.get(current)){
indegree[node]--;
if(indegree[node]==0){
queue.offer(node);
}
}
}
if(index==numCourses){
return result;
}
return new int[0];
}Version 2: Topological Sort https://labuladong.github.io/algo/2/19/35/
Last updated


