| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode 207.课程表(包括课程表Ⅱ,超详细解答) -> 正文阅读 |
|
[数据结构与算法]LeetCode 207.课程表(包括课程表Ⅱ,超详细解答) |
一、第一个,课程表。 1、题目描述: 你这个学期必须选修 numCourses 门课程,记为?0?到?numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组?prerequisites 给出,其中?prerequisites[i] = [ai, bi] ,表示如果要学习课程?ai 则 必须 先学习课程??bi 。 例如,先修课程对?[0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。 示例 1: 输入:numCourses = 2, prerequisites = [[1,0]] 2、思路: 本题是一道经典的「拓扑排序」问题。 给定一个包含 n?个节点的有向图 G,我们给出它的节点编号的一种排列,如果满足: 对于图 G?中的任意一条有向边 (u, v),u?在排列中都出现在 v?的前面,那么称该排列是图?G?的「拓扑排序」。 我们将每一门课看成一个节点; 如果想要学习课程 A?之前必须完成课程 B,那么我们从 B 到 A 连接一条有向边。这样以来,在拓扑排序中,B 一定出现在 A?的前面。 3、算法: 队列que用于深度优先搜索,map来表示课程之间的依赖关系(key代表课程,value代表依赖该课程的数组),如果一个节点的入度为0,表示该门课程没有先修课程,可以直接学习,就加入队列中,当队列不为空,出队列(表示学习完了该课程),依赖于该课程的入度-1,如果恰好入度减为0,继续添加到队列中,直到队列为空。 4、代码:
二、课程表Ⅱ 1、思路: 跟这道题基本差不多,就是把bfs搜索过的结点加入数组中,这个数组就是满足要求的其中一种情况。 2、代码:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:26:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |