207. 课程表 --力扣 --JAVA

2023-12-19 06:35:25

题目

你这个学期必须选修?numCourses?门课程,记为?0?到?numCourses - 1?。

在选修某些课程之前需要一些先修课程。 先修课程按数组?prerequisites?给出,其中?prerequisites[i] = [ai, bi]?,表示如果要学习课程?ai?则?必须?先学习课程??bi?。

  • 例如,先修课程对?[0, 1]?表示:想要学习课程?0?,你需要先完成课程?1?。

请你判断是否可能完成所有课程的学习?如果可以,返回?true?;否则,返回?false?。

解题思路

  1. 以课程id进行整理数据,收集需要当前课程作为前置课程的课程;
  2. 从不需要前置课程的课程进行清除数据;
  3. 若课程数量最后清为0则可以学完所有课程,否则则不可以。

代码展示

class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        List<List<Integer>> resources = new ArrayList<>();
        int[] indegrees = new int[numCourses];
        for (int i = 0; i < numCourses; i++){
            resources.add(new ArrayList<>());
        }
        for (int[] nums : prerequisites){
            indegrees[nums[0]]++;
            resources.get(nums[1]).add(nums[0]);
        }
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 0; i < numCourses; i++){
            if(indegrees[i] == 0){
                queue.add(i);
            }
        }
        while (!queue.isEmpty()){
            int val = queue.poll();
            numCourses--;
            for (int num : resources.get(val)){
                if(--indegrees[num] == 0){
                    queue.add(num);
                }
            }
        }
        return numCourses == 0;
    }
}

文章来源:https://blog.csdn.net/qq_45794129/article/details/135074389
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。