Course Schedule II

LC 210

return the possible solutions


public class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        if(numCourses == 0) return new int[0];
        int[] res = new int[numCourses];
        if(prerequisites == null || prerequisites.length == 0 || prerequisites[0] == null || prerequisites[0].length == 0){
            for(int i = 0; i < numCourses; i++){
                res[i] = i;
            }
            return res;
        }
        HashMap<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
        int[] degree = new int[numCourses];
        for(int i = 0; i < prerequisites.length; i++){
            if(map.containsKey(prerequisites[i][1])){
                map.get(prerequisites[i][1]).add(prerequisites[i][0]);
                degree[prerequisites[i][0]]++;
            }else{
                List<Integer> list = new ArrayList<Integer>();
                list.add(prerequisites[i][0]);
                map.put(prerequisites[i][1], list);
                degree[prerequisites[i][0]]++;
            }
        }
        Queue<Integer> queue = new LinkedList<Integer>();
        for(int i = 0; i < numCourses; i++){
            if(degree[i] == 0 ){
                queue.offer(i);
            }
        } 
        int count = 0;
        while(!queue.isEmpty()){
            int cur = queue.poll();
            res[count++] = cur;
            if(map.containsKey(cur)){
                for(int item : map.get(cur)){
                    degree[item]--;
                    if(degree[item] == 0){
                        queue.offer(item);
                    }
                }
            }
        }
        if(count != numCourses) return new int[0];
        return res;
    }
}
class Solution {
    public int[] findOrder(int numCourses, int[][] prerequisites) {
        Map<Integer, Integer> rMap = new HashMap<>();
        Map<Integer, List<Integer>> nextMap = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0 ; i < prerequisites.length; i++ ) {
            if (!rMap.containsKey(prerequisites[i][0])) {
                rMap.put(prerequisites[i][0], 0);
            }
            rMap.put(prerequisites[i][0], rMap.get(prerequisites[i][0]) + 1);
            if (!nextMap.containsKey(prerequisites[i][1])) {
                nextMap.put(prerequisites[i][1], new ArrayList<>());
            }
            List<Integer> next = nextMap.get(prerequisites[i][1]);
            next.add(prerequisites[i][0]);
            nextMap.put(prerequisites[i][1], next);
        }
        for (int i = 0; i < numCourses; i++) {
            if (!rMap.containsKey(i)) {
                queue.offer(i);
            }
        }
        while(!queue.isEmpty()) {
            Integer cur = queue.poll();
            list.add(cur);
            if (!nextMap.containsKey(cur)) {
                continue;
            }
            for (Integer i : nextMap.get(cur)) {
                if (rMap.get(i) == 1) {
                    rMap.remove(i);
                    queue.offer(i);
                } else {
                    rMap.put(i, rMap.get(i) - 1);
                }
            }
        }
        if (rMap.size() != 0) {
            return new int[0];
        }
        return list.stream().mapToInt(i -> i).toArray();
    }
}

results matching ""

    No results matching ""