【图论】Leetcode 207. 课程表【中等】

2024-04-14 1280阅读

课程表

你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。

【图论】Leetcode 207. 课程表【中等】
(图片来源网络,侵删)

在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。

  • 例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。

    请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。

    示例1:

    输入: numCourses = 2, prerequisites = [[1,0]]

    输出: true

    解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。

    解题思路

    • 这个问题可以转化为判断有向图中是否存在环的问题,如果存在环,

      则说明存在课程之间的循环依赖,无法完成所有课程的学习;

      如果不存在环,则说明不存在循环依赖,可以完成所有课程的学习。

    • 1、使用拓扑排序来判断是否存在环,即是否可以完成所有课程的学习。

    • 2、使用邻接表来表示课程之间的先修关系。

    • 3、统计每门课程的入度,入度为0表示没有先修课程。

    • 4、将入度为0的课程加入队列,并从队列中依次弹出课程,将其后继课程的入度减1。

    • 5、如果存在环,即存在入度为0的课程无法全部弹出,则说明无法完成所有课程的学习,返回false;否则返回true。

      Java实现

      广度优先搜索(BFS)实现

      public class CourseSchedule {
          public boolean canFinish(int numCourses, int[][] prerequisites) {
              // 构建有向图和入度数组
              Map graph = new HashMap();
              int[] indegree = new int[numCourses];
              for (int[] prereq : prerequisites) {
                  int course = prereq[0];
                  int prereqCourse = prereq[1];
                  graph.putIfAbsent(prereqCourse, new ArrayList());
                  graph.get(prereqCourse).add(course);
                  indegree[course]++;
              }
              
              // 将入度为 0 的节点加入队列中
              Queue queue = new LinkedList();
              for (int i = 0; i  
      

      时间空间复杂度

      • 时间复杂度:O(V + E),其中 V 表示课程数量,E 表示先修课程的数量,因为需要构建邻接表和统计入度,以及进行BFS拓扑排序。

      • 空间复杂度:O(V + E),其中 V 表示课程数量,E 表示先修课程的数量,因为需要存储邻接表和入度数组。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]