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的时候,加入队列

相关推荐
飞翔中文网1 小时前
Java学习笔记之抽象类与接口(设计思想)
java·笔记·学习
qcx231 小时前
【系统学AI】09 Multi-Agent架构(2026版):从学术理论到工业级实践
java·人工智能·架构·multi-agent·claude agent
半旧夜夏2 小时前
【保姆级】微服务组件环境搭建(Docker Compose版)
java·linux·spring cloud·微服务·云原生·容器
jiayong232 小时前
AI架构师面试题库 - 完整汇总文档
人工智能·面试·职场和发展
云烟成雨TD3 小时前
Spring AI 1.x 系列【33】RAG Advisor 组件与四大分层架构
java·人工智能·spring
用户987409238873 小时前
llamafactory 0.6.3 没有 llamafactory-cli
算法
计算机安禾3 小时前
【算法分析与设计】第26篇:参数化算法与固定参数可解性理论
大数据·人工智能·算法·机器学习·剪枝
江南十四行4 小时前
并发编程(七)
java
AI科技星4 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法