1. 0207. 课程表
描述:给定一个整数
要求:判断是否可能完成所有课程的学习。如果可以,返回 True
,否则,返回 False
。
说明:
-
$1 \le numCourses \le 10^5$ 。 -
$0 \le prerequisites.length \le 5000$ 。 -
$prerequisites[i].length == 2$ 。 -
$0 \le ai, bi < numCourses$ 。 -
$prerequisites[i]$ 中所有课程对互不相同。
示例:
- 示例 1:
输入:numCourses = 2, prerequisites = [[1,0]]
输出:true
解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。这是可能的。
- 示例 2:
输入:numCourses = 2, prerequisites = [[1,0],[0,1]]
输出:false
解释:总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。这是不可能的。
2. 0210. 课程表 II
描述:给定一个整数
要求:返回学完所有课程所安排的学习顺序。如果有多个正确的顺序,只要返回其中一种即可。如果无法完成所有课程,则返回空数组。
说明:
-
$1 \le numCourses \le 2000$ 。 -
$0 \le prerequisites.length \le numCourses \times (numCourses - 1)$ 。 -
$prerequisites[i].length == 2$ 。 -
$0 \le ai, bi < numCourses$ 。 -
$ai \ne bi$ 。 - 所有$[ai, bi]$ 互不相同。
示例:
- 示例 1:
输入:numCourses = 2, prerequisites = [[1,0]]
输出:[0,1]
解释:总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1]。
- 示例 2:
输入:numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]]
输出:[0,2,1,3]
解释:总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。
因此,一个正确的课程顺序是 [0,1,2,3] 。另一个正确的排序是 [0,2,1,3]。
描述:给定一个有向图
要求:找出图中所有的安全节点,将其存入数组作为答案返回,答案数组中的元素应当按升序排列。
说明:
- 终端节点:如果一个节点没有连出的有向边,则它是终端节点。或者说,如果没有出边,则节点为终端节点。
- 安全节点:如果从该节点开始的所有可能路径都通向终端节点,则该节点为安全节点。
-
$n == graph.length$ 。 -
$1 \le n \le 10^4$ 。 -
$0 \le graph[i].length \le n$ 。 -
$0 \le graph[i][j] \le n - 1$ 。 -
$graph[i]$ 按严格递增顺序排列。 - 图中可能包含自环。
- 图中边的数目在范围
$[1, 4 \times 10^4]$ 内。
示例:
- 示例 1:
输入:graph = [[1,2],[2,3],[5],[0],[5],[],[]]
输出:[2,4,5,6]
解释:示意图如上。
节点 5 和节点 6 是终端节点,因为它们都没有出边。
从节点 2、4、5 和 6 开始的所有路径都指向节点 5 或 6。
- 示例 2:
输入:graph = [[1,2,3,4],[1,2],[3,4],[0,4],[]]
输出:[4]
解释:
只有节点 4 是终端节点,从节点 4 开始的所有路径都通向节点 4。
- 「0207. 课程表」习题解析:网页链接、Github 链接
- 「0210. 课程表 II」习题解析:网页链接、Github 链接
- 「0802. 找到最终的安全状态」习题解析:网页链接、Github 链接