From d60f2c833a251f7fa3d29fdbfe31cc812114a27c Mon Sep 17 00:00:00 2001 From: Rupa <102663541+Rupa-Rd@users.noreply.github.com> Date: Thu, 12 Dec 2024 12:48:26 +0530 Subject: [PATCH] Time: 6 ms (56.08%) | Memory: 46.4 MB (10.49%) - LeetSync --- .../course-schedule-ii.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 210-course-schedule-ii/course-schedule-ii.java 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> 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 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