怎样建设尧都水果网站,移动端网站咋做,网站建设指导合同,设计网站公司有哪些2023-09-10每日一题
一、题目编号
210. 课程表 II二、题目链接
点击跳转到题目位置
三、题目描述
现在你总共有 numCourses 门课需要选#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites #xff0c;其中 prerequisites[i] [ai, bi] #xff0c;表示在…2023-09-10每日一题
一、题目编号
210. 课程表 II二、题目链接
点击跳转到题目位置
三、题目描述
现在你总共有 numCourses 门课需要选记为 0 到 numCourses - 1。给你一个数组 prerequisites 其中 prerequisites[i] [ai, bi] 表示在选修课程 ai 前 必须 先选修 bi 。
例如想要学习课程 0 你需要先完成课程 1 我们用一个匹配来表示[0,1] 。 返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序你只要返回 任意一种 就可以了。如果不可能完成所有课程返回 一个空数组 。
示例 1 示例 2 示例 3 提示
1 numCourses 20000 prerequisites.length numCourses * (numCourses - 1)prerequisites[i].length 20 ai, bi numCoursesai ! bi所有[ai, bi] 互不相同
四、解题代码
class Solution {
public:#define maxn 100010vectorint Edges[maxn];int hash[maxn];int deg[maxn];void addEdge(int u,int v){Edges[u].push_back(v);deg[v];}vectorint findOrder(int numCourses, vectorvectorint prerequisites) {memset(hash,0,sizeof(hash));memset(deg,0,sizeof(deg));int lengthprerequisites.size();for(int i0;ilength;i){Edges[i].clear();hash[i]0;}for(int i0;ilength;i){addEdge(prerequisites[i][1],prerequisites[i][0]);}queueint q;vectorint res;int x0;for(int i0;inumCourses;i){if(deg[i]0){x;q.push(i);hash[i]1;res.push_back(i);}}vectorint path;while(!q.empty()){int uq.front();q.pop();for(int i0;iEdges[u].size();i){deg[Edges[u][i]]--;if(deg[Edges[u][i]]0 hash[Edges[u][i]]0){q.push(Edges[u][i]);hash[Edges[u][i]]1;res.push_back(Edges[u][i]);x;}}}if(xnumCourses){return res;}return path;}
};五、解题思路
(1) 依然是一道拓扑排序的经典题目。