Course Schedule II

Return the ordering of courses you should take to finish all courses. There may be multiple correct orders, you just need to return one of them.

  • Time: O(N) Space: O(1)
public int[] findOrder(int numCourses, int[][] prerequisites) {
    Queue<Integer> queue = new LinkedList<>();
    int[] ret = new int[numCourses];
    int[] indegree = new int[numCourses];
    int counter = 0;
    Map<Integer, List<Integer>> map = new HashMap<>();
    for (int[] num : prerequisites) {
        List list = map.containsKey(num[1]) ? map.get(num[1]) : new ArrayList<>();
        list.add(num[0]);
        map.put(num[1], list);
        indegree[num[0]]++;
    }
    for (int i = 0; i < numCourses; i++)
        if (indegree[i] == 0) queue.offer(i);

    while (!queue.isEmpty()) {
        Integer course = queue.poll();
        ret[counter++] = course;
        if (map.get(course) != null) {
            for (Integer adjacent : map.get(course)) 
                if (--indegree[adjacent] == 0) queue.offer(adjacent);
        }
    }
    return counter == numCourses ? ret : new int[]{};
}

results matching ""

    No results matching ""