学校网站分析,青岛做网站找哪家,全国装饰公司排名100强名单,潮州网站设计目录 1.题目2.思路3.代码实现#xff08;Java#xff09; 1.题目
你总共需要上 numCourses 门课#xff0c;课程编号依次为 0 到 numCourses - 1 。你会得到一个数组 prerequisite #xff0c;其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程#xff0c;你必须先… 目录 1.题目2.思路3.代码实现Java 1.题目
你总共需要上 numCourses 门课课程编号依次为 0 到 numCourses - 1 。你会得到一个数组 prerequisite 其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程你必须先选 ai 课程。
有的课会有直接的先修课程比如如果想上课程 1 你必须先上课程 0 那么会以 [0,1] 数对的形式给出先修课程数对。先决条件也可以是间接的。如果课程 a 是课程 b 的先决条件课程 b 是课程 c 的先决条件那么课程 a 就是课程 c 的先决条件。
你也得到一个数组 queries 其中 queries[j] [uj, vj]。对于第 j 个查询您应该回答课程 uj 是否是课程 vj 的先决条件。返回一个布尔数组 answer其中 answer[j] 是第 j 个查询的答案。
示例 1 输入numCourses 2, prerequisites [[1,0]], queries [[0,1],[1,0]] 输出[false,true] 解释课程 0 不是课程 1 的先修课程但课程 1 是课程 0 的先修课程。
示例 2 输入numCourses 2, prerequisites [], queries [[1,0],[0,1]] 输出[false,false] 解释没有先修课程对所以每门课程之间是独立的。
示例 3 输入numCourses 3, prerequisites [[1,2],[1,0],[2,0]], queries [[1,0],[1,2]] 输出[true,true]
提示 2 numCourses 100 0 prerequisites.length (numCourses * (numCourses - 1) / 2) prerequisites[i].length 2 0 ai, bi n - 1 ai ! bi 每一对 [ai, bi] 都 不同 先修课程图中没有环。 1 queries.length 104 0 ui, vi n - 1 ui ! vi
2.思路
1拓扑排序 BFS 本题与 210.课程表 II 这题类似可以使用拓扑排序 BFS 来解决只不过在遍历图的过程中需要记录每对节点之间的关系即可具体代码如下所示。
相关题目 LeetCode_环检测_DFS_中等_207.课程表 LeetCode_拓扑排序_BFS_中等_210.课程表 II LeetCode_贪心算法_困难_630.课程表 III
3.代码实现Java
//思路1————拓扑排序 BFS
class Solution {public ListBoolean checkIfPrerequisite(int numCourses, int[][] prerequisites, int[][] queries) {//邻接表ListInteger[] graph new ArrayList[numCourses];for (int i 0; i numCourses; i) {graph[i] new ArrayList();}//保存每个节点的入度int[] inDegree new int[numCourses];for (int[] edge : prerequisites) {graph[edge[0]].add(edge[1]);inDegree[edge[1]];}QueueInteger queue new ArrayDeque();for (int i 0; i numCourses; i) {if (inDegree[i] 0) {queue.offer(i);}}// isPre[i][j] true 表示课程 i 是课程 j 的先决条件boolean[][] isPre new boolean[numCourses][numCourses];while (!queue.isEmpty()) {int node queue.poll();for (int next : graph[node]) {isPre[node][next] true;for (int i 0; i numCourses; i) {isPre[i][next] isPre[i][next] || isPre[i][node];}inDegree[next]--;if (inDegree[next] 0) {queue.offer(next);}}}ListBoolean res new ArrayList();for (int[] query : queries) {res.add(isPre[query[0]][query[1]]);}return res;}
}