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

相关推荐
就叫_这个吧34 分钟前
Java递归方法实现面包屑导航
java·开发语言
小O的算法实验室1 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
fīɡЙtīиɡ ℡1 小时前
AI 应用系统设计
java·开发语言·人工智能
小飞学编程...1 小时前
【哈希表】
数据结构·哈希算法·散列表
城管不管1 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅1 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒1 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
Tbisnic2 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
最强小杰2 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
Brilliantwxx2 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法