Course Schedule

class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        if (prerequisites == null || prerequisites.length == 0 || numCourses == 0) {
            return true;
        }
        int[] inDegree = getInDegree(numCourses, prerequisites);
        Map<Integer, List<Integer>> dependencies = getDependencies(prerequisites);
        int selectedCourse = 0;
        
        Queue<Integer> queue = new ArrayDeque<>();
        for (int i = 0; i < inDegree.length; i++) {
            if (inDegree[i] == 0) {
                queue.offer(i);
            }
        }
        
        while (!queue.isEmpty()) {
            int course = queue.poll();
            selectedCourse++;
            if (!dependencies.containsKey(course)) {
                continue;
            }
            
            for (int related : dependencies.get(course)) {
                inDegree[related]--;
                if (inDegree[related] == 0) {
                    queue.offer(related);
                }
            }
        }
        
        return selectedCourse == numCourses;
    }
    
    private int[] getInDegree(int numCourses, int[][] prerequisites) {
        int[] inDegree = new int[numCourses];
        for (int[] prerequisite : prerequisites) {
            inDegree[prerequisite[0]]++;
        }
        return inDegree;
    }
    
    private Map<Integer, List<Integer>> getDependencies(int[][] prerequisites) {
        Map<Integer, List<Integer>> dependencies = new HashMap<>();
        for (int[] prerequisite : prerequisites) {
         dependencies.putIfAbsent(prerequisite[1], new ArrayList<>());
         dependencies.get(prerequisite[1]).add(prerequisite[0]);
        }
        return dependencies;
    }
}

最后更新于

这有帮助吗?