LeetCode:207课程表

java 复制代码
class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        //记录入度
        int[] inDegree = new int[numCourses];
        //建立邻接表
        List<List<Integer>> adjacencyList = new ArrayList<>();
        for(int i = 0; i < numCourses; i++){
            adjacencyList.add(new ArrayList<>());
        }
        //建图,pre[0]是想学的课,pre[1]是前置课
        for(int[] pre : prerequisites){
            int courseToTake = pre[0];
            int prerequisite = pre[1];

            inDegree[courseToTake]++;
            //学完想学的课的前置课程,才能将想学的课加入到邻接表中相应位置
            adjacencyList.get(prerequisite).add(courseToTake);
        }
        //将没有前置课程的课放入到队列中
        Queue<Integer> queue = new LinkedList<>();
        for(int i = 0; i < numCourses; i++){
            if(inDegree[i] == 0){
                queue.offer(i);
            }
        }

        int finishedCourses = 0;

        while(!queue.isEmpty()){
            int currentCourse = queue.poll();
            finishedCourses++;
            //找到这门课程能解锁的后续课程
            for(int nextCourse : adjacencyList.get(currentCourse)){
                inDegree[nextCourse]--;

                if(inDegree[nextCourse] == 0){
                    queue.offer(nextCourse);
                }
            }
        }
        return finishedCourses == numCourses;
    }
}

解题思路:

建立邻接表

建图将课程的关系放入进邻接表中

将没有前置课程的课程放入进队列中

逻辑处理,找到当前课程的后续课程,将入度-1并进行判断,入度为0的时候,加入队列

相关推荐
谢亮_vipxieliang4 分钟前
泛型擦除、通配符与 PECS 一次讲透
java·面试
八解毒剂11 分钟前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
乐迪信息1 小时前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
打工仔折腾 AI1 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
ZealSinger1 小时前
Java虚拟线程上线后瓶颈转移到哪看三层
java·开发语言·firefox
2601_961133281 小时前
盘立方软件指标文华期货公式下载
java
蜗牛互联网1 小时前
长任务多Agent共享文件系统的Manifest交接模式
java·人工智能·后端
Sirens.2 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
和裕2 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
sunshine22 girl3 小时前
Java学习五 面向对象高级5 内部类1
java·学习