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

相关推荐
geovindu5 分钟前
java: Gale-Shapley Algorithm
java·开发语言·后端·算法
LUCKY-LIVING19 分钟前
ELF File in linux
android·java·linux
代码代码快快显灵23 分钟前
MYSQL—DAY1
面试·职场和发展
冻柠檬飞冰走茶25 分钟前
PTA基础编程题目集 7-34 通讯录的录入与显示(C语言实现)
c语言·开发语言·数据结构·算法
zander25829 分钟前
LeetCode 79. 单词搜索
算法·深度优先
星核0penstarry38 分钟前
DeepSeek-V4-Flash 正式公测:大模型行业进入「极速平价普惠时代」
java·开发语言·人工智能
老洋葱Mr_Onion40 分钟前
【C++】高精度模板
开发语言·c++·算法
脚踏实地皮皮晨1 小时前
003003002_WPF Grid 基类官方类定义逐行深度解析
开发语言·windows·算法·c#·wpf·visual studio
xieliyu.1 小时前
Java 线程池入门详解:线程池基础定义 + ThreadPoolExecutor 全参构造方法逐参数解析
java·开发语言·idea·javaee
lemon_sjdk1 小时前
Reactor几个重要的接口(1)
java·spring·webflux