207. 课程表

这题要使用BFS算法,BFS也就是广度优先搜索,DFS是深度优先搜索,BFS是一层一层走,DFS是一条路走到头

这张图展示的就是BFS算法

在这道题里,最重要的就是创建一个用来放每个节点入度个数的数组以及一个二维节点邻接表

数组用来记录当前节点的入度个数,入度个数为0的节点可以入队

那么像0,1,2这三个节点就能入队,入队后要出队,出队时我们需要在二维节点邻接表中找到这个节点对应的后续节点,并且对应的给该节点的入度数减1

并且我们需要维护一个记录数,最后没有节点能够入队且队列中没有数据时跳出循环

java 复制代码
class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        // 记录每门课程的度数
        int[] inDegree = new int[numCourses];
        // 初始化邻接表
        List<List<Integer>> adjList = new ArrayList<>();
        for (int i = 0;i<numCourses;i++){
            adjList.add(new ArrayList<>());
        }
        // 计算每门课程的入度,并构建邻接表
        for(int[] prerequisite :prerequisites){
            int course = prerequisite[0];
            int preCourse = prerequisite[1];
            //该门课程的入读数加一
            inDegree[course]++;
            //邻接表中加入邻接数据
            adjList.get(preCourse).add(course);
        }

        //度数为0的课程先入队,因为本来就不需要先前课程
        Queue<Integer> queue = new LinkedList<>();
        for(int i = 0;i<numCourses;i++){
            if(inDegree[i] == 0)    {
                queue.offer(i);
            }
        }


        // 记录已完成的课程数
        int count = 0;
        //只要队列中还有度数为0的课程
        while(!queue.isEmpty()){
            int selectedCourse = queue.poll();
            //统计个数加1
            count++;
            //完成更新.后续涉及此课程为前提课程的课程的度数减1
            //先获取当前课程的后续课程列表
            List<Integer> nextCourses = adjList.get(selectedCourse);
            for(int nextCourse : nextCourses){
                //后续课程的入度减1
                inDegree[nextCourse]--;
                //如果减到0了,入队
                if(inDegree[nextCourse] == 0){
                    queue.offer(nextCourse);
                }
            }

        }
        return count == numCourses;

    }
}
相关推荐
超级大福宝1 小时前
VS Code Remote-SSH 因 RemoteForward 端口冲突导致连接失败的排查与解决
运维·服务器·windows·vscode·ssh
Vex2une1 小时前
Windows PowerShell 发展史:从命令行工具到自动化核心
windows·自动化运维·命令行·powershell·cmd·脚本语言·对象管道
怎么没有名字注册了啊13 小时前
Qt开发:MessageBox怎么调出标题栏那个问号按钮?
windows
李子红了时14 小时前
EncFS MP中文版汉化下载(免费文件加密工具)
windows·安全
辻弋20115 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
会飞的土拨鼠呀15 小时前
Windows 系统关闭虚拟内存文件pagefile.sys
windows
传奇开心果编程17 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
工作10年+,存储芯片行业17 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
lpfasd12318 小时前
WinSW在Win7上失败真相-实测与修复
windows·nginx
万山寒19 小时前
windows使用WinSW注册服务
windows