diff --git a/210-course-schedule-ii/course-schedule-ii.java b/210-course-schedule-ii/course-schedule-ii.java new file mode 100644 index 0000000..5493b4b --- /dev/null +++ b/210-course-schedule-ii/course-schedule-ii.java @@ -0,0 +1,48 @@ +class Solution { + public int[] findOrder(int numCourses, int[][] prerequisites) { + ArrayList<ArrayList<Integer>> graph = new ArrayList<>(); + + for(int i = 0; i < numCourses; i++){ + graph.add(new ArrayList<>()); + } + + for(int i = 0; i < prerequisites.length; i++){ + graph.get(prerequisites[i][1]).add(prerequisites[i][0]); + } + + int[] indegree = new int[numCourses]; + for(int i = 0; i < numCourses; i++){ + for(int neigh: graph.get(i)){ + indegree[neigh] ++; + } + } + + Queue<Integer> q = new LinkedList<>(); + + for(int i = 0; i < numCourses; i++){ + if(indegree[i] == 0){ + q.add(i); + } + } + int[] topo = new int[numCourses]; + int i = 0; + + while(!q.isEmpty()){ + int top = q.poll(); + topo[i++] = top; + + for(int neigh: graph.get(top)){ + indegree[neigh] --; + if(indegree[neigh] == 0){ + q.add(neigh); + } + } + } + + if(i == numCourses){ + return topo; + }else{ + return new int[]{}; + } + } +} \ No newline at end of file