当前位置: 首页 > news >正文

域名备案查询 网站备案查询怎么创建网站教程

域名备案查询 网站备案查询,怎么创建网站教程,南昌如何做百度的网站,网站建设公司外链怎么做想要精通算法和SQL的成长之路 - 课程表 前言一. 课程表II (拓扑排序)1.1 拓扑排序1.2 题解 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 课程表II (拓扑排序) 原题链接 1.1 拓扑排序 核心知识: 拓扑排序是专…

想要精通算法和SQL的成长之路 - 课程表

  • 前言
  • 一. 课程表II (拓扑排序)
    • 1.1 拓扑排序
    • 1.2 题解

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 课程表II (拓扑排序)

原题链接
在这里插入图片描述

1.1 拓扑排序

核心知识:

  1. 拓扑排序是专门应用于有向图的算法。
  2. BFS的写法就叫拓扑排序,核心就是:让入度为0的节点入队。
  3. 拓扑排序的结果不唯一。
  4. 同时拓扑排序有一个重要的功能:能够检测有向图中是否存在环。

我们先分析一下本题:

  1. 先说下课程,课程有它自己的一个先后的依赖顺序。符合 “有向”
  2. 想要学习某个课程,它的前缀课程可能有多个。那么我们可以用 “度” 的概念去标识衡量。这里是入度。

先用图来解释下本次算法的核心方向(摘自leetcode题解):

  1. 在这里插入图片描述
  2. 在这里插入图片描述
  3. 在这里插入图片描述
  4. 在这里插入图片描述
  5. 在这里插入图片描述
  6. 在这里插入图片描述

说白了就是:

  1. 不断地找入度为0的节点,然后剔除。剔除的同时维护后续节点的入度数
  2. 以此类推。

1.2 题解

那么本题我们该如何解?我们一步步来,我们以numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]] 为例来说。官方解释:

  • 总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。
public int[] findOrder(int numCourses, int[][] prerequisites) {}

那么我们可以知道这个二维数组prerequisites中,第二个数字代表:”前缀“,第一个数字代表:”后缀“。[1,0] 用图表示就是:0->1同时我们还可以计算出,此时1这个节点的入度应该+1。因为0指向了1。

1.首先,我们要对入参做一个校验:

// 1. 先判断数组或者numCourses为空的情况
if (numCourses <= 0) {return new int[0];
}

2.我们需要遍历二维数组prerequisites中,拿到所有节点的入度以及这个拓扑图的结构。

  • 我们用inDegree[]数组表示各个节点的入度。
  • 用一个HashSet数组表示邻接表的结果。数组的索引代表的是节点的值。数组值(即HashMap)代表这个节点的所有后继节点。以0为例,它的后继节点有1和2。
// 2. 用inDegree[] 数组表示每个节点的入度数。
// 同时维护拓扑图的结构例如:0->1,0->2
HashSet<Integer>[] adj = new HashSet[numCourses];
// 初始化下
for (int i = 0; i < numCourses; i++) {adj[i] = new HashSet<>();
}
// 构建入度
int[] inDegree = new int[numCourses];
for (int[] p : prerequisites) {// 入度+1inDegree[p[0]]++;// 把当前节点的后继节点存储起来adj[p[1]].add(p[0]);
}

3.我们用一个队列,用来存储入度为0的节点。

// 3.准备个队列,存储入度为0的节点
LinkedList<Integer> queue = new LinkedList<>();
for (int i = 0; i < numCourses; i++) {if (inDegree[i] == 0) {queue.offer(i);}
}

为啥要这一个步骤?如果发现没有入度为0的节点,说明啥,成环了,那本题就无解。如图:
在这里插入图片描述
4.如果存在入度为0的节点,我们开始往后递归,做2.1节的内容。

  • 先拿到入度为0的节点,删除它(把他放入结果集)。
  • 同时维护后继节点的入度。
  • 如果后继节点入度数-1后,为0。那么同样放入到队列中递归。
// 结果集
int[] res = new int[numCourses];
// 统计结果集中的个数
int count = 0;
while (!queue.isEmpty()) {// 入度为0的节点,我们弹出Integer head = queue.poll();// 放入结果集res[count++] = head;// 当前入度为0节点对应的后继节点。如果是0 --> 1,2HashSet<Integer> nextNodeList = adj[head];// 更新后继节点的入度for (Integer nextNode : nextNodeList) {// 对应的后继节点的入度要减1,inDegree[nextNode]--;// 如果入度-1后,为0了。再入队if (inDegree[nextNode] == 0) {queue.offer(nextNode);}}
}

最后,我们只需要关心结果集个数是否和题干中的numCourses一致。一致的话返回我们构建的结果集,否则本题为空解:

// 如果遍历完了,发现count数量和 numCourses一致,说明有一个正确的结果集
if (count == numCourses) {return res;
}
return new int[0];

最终完整代码如下:

public class Test210 {public int[] findOrder(int numCourses, int[][] prerequisites) {// 1. 先判断数组或者numCourses为空的情况if (numCourses <= 0) {return new int[0];}// 2. 用inDegree[] 数组表示每个节点的入度数。// 同时维护拓扑图的结构例如:0->1,0->2HashSet<Integer>[] adj = new HashSet[numCourses];// 初始化下for (int i = 0; i < numCourses; i++) {adj[i] = new HashSet<>();}// 构建入度int[] inDegree = new int[numCourses];for (int[] p : prerequisites) {// 入度+1inDegree[p[0]]++;// 把当前节点的后继节点存储起来adj[p[1]].add(p[0]);}// 3.准备个队列,存储入度为0的节点LinkedList<Integer> queue = new LinkedList<>();for (int i = 0; i < numCourses; i++) {if (inDegree[i] == 0) {queue.offer(i);}}// 结果集int[] res = new int[numCourses];// 统计结果集中的个数int count = 0;while (!queue.isEmpty()) {// 入度为0的节点,我们弹出Integer head = queue.poll();// 放入结果集res[count++] = head;// 当前入度为0节点对应的后继节点。如果是0 -- > 1,2HashSet<Integer> nextNodeList = adj[head];// 更新后继节点的入度for (Integer nextNode : nextNodeList) {// 对应的next节点的入度要减1,inDegree[nextNode]--;// 如果入度-1后,为0了。再入队if (inDegree[nextNode] == 0) {queue.offer(nextNode);}}}// 如果遍历完了,发现count数量和 numCourses一致,说明有一个正确的结果集if (count == numCourses) {return res;}return new int[0];}
}

这个题目,算是课程表系列的第二道了。第一道:207. 课程表,做法和上面一模一样,只不过返回数组的地方返回true/false即可。


文章转载自:
http://wanjiaoutmarry.bbtn.cn
http://wanjiaanchoveta.bbtn.cn
http://wanjiaradication.bbtn.cn
http://wanjiaprofile.bbtn.cn
http://wanjiagliosis.bbtn.cn
http://wanjiamuscicolous.bbtn.cn
http://wanjiapolygamous.bbtn.cn
http://wanjiabegorra.bbtn.cn
http://wanjialynchet.bbtn.cn
http://wanjiaenzymic.bbtn.cn
http://wanjiajaded.bbtn.cn
http://wanjiacosupervision.bbtn.cn
http://wanjiasequentia.bbtn.cn
http://wanjiamacadamize.bbtn.cn
http://wanjiagaruda.bbtn.cn
http://wanjiaflagellin.bbtn.cn
http://wanjiavergilian.bbtn.cn
http://wanjiamicroearthquake.bbtn.cn
http://wanjiachorally.bbtn.cn
http://wanjiamesopause.bbtn.cn
http://wanjiaduodecimal.bbtn.cn
http://wanjialumbaginous.bbtn.cn
http://wanjiacapillaceous.bbtn.cn
http://wanjiaseamanlike.bbtn.cn
http://wanjiapaging.bbtn.cn
http://wanjiazydeco.bbtn.cn
http://wanjiamushily.bbtn.cn
http://wanjiashamefast.bbtn.cn
http://wanjiaimmolator.bbtn.cn
http://wanjiadevilishly.bbtn.cn
http://wanjiaauthorship.bbtn.cn
http://wanjiaequestrienne.bbtn.cn
http://wanjiasistine.bbtn.cn
http://wanjiapeninsular.bbtn.cn
http://wanjiasinkage.bbtn.cn
http://wanjiahydrogenize.bbtn.cn
http://wanjiacadenced.bbtn.cn
http://wanjiagorhen.bbtn.cn
http://wanjiadisutility.bbtn.cn
http://wanjiahinkty.bbtn.cn
http://wanjiastratolab.bbtn.cn
http://wanjiaepu.bbtn.cn
http://wanjiaeradiate.bbtn.cn
http://wanjiasonorant.bbtn.cn
http://wanjiamuniment.bbtn.cn
http://wanjiaantirabic.bbtn.cn
http://wanjiapunctulated.bbtn.cn
http://wanjiataction.bbtn.cn
http://wanjianarrowfisted.bbtn.cn
http://wanjiafeastful.bbtn.cn
http://wanjiasongster.bbtn.cn
http://wanjiamagnate.bbtn.cn
http://wanjiatotter.bbtn.cn
http://wanjialacquering.bbtn.cn
http://wanjiameetinghouse.bbtn.cn
http://wanjianeoterism.bbtn.cn
http://wanjiabenevolent.bbtn.cn
http://wanjiadichotomy.bbtn.cn
http://wanjiajointweed.bbtn.cn
http://wanjiasbirro.bbtn.cn
http://wanjiafrondiferous.bbtn.cn
http://wanjiaragbolt.bbtn.cn
http://wanjiamisdoer.bbtn.cn
http://wanjiasynod.bbtn.cn
http://wanjiaked.bbtn.cn
http://wanjiaabridge.bbtn.cn
http://wanjiareptilivorous.bbtn.cn
http://wanjiakyphosis.bbtn.cn
http://wanjiaperspiratory.bbtn.cn
http://wanjiacaplin.bbtn.cn
http://wanjiadavey.bbtn.cn
http://wanjialaccolite.bbtn.cn
http://wanjiabudding.bbtn.cn
http://wanjiamonstrosity.bbtn.cn
http://wanjiadealing.bbtn.cn
http://wanjiaalbum.bbtn.cn
http://wanjiaplaid.bbtn.cn
http://wanjianursery.bbtn.cn
http://wanjiaropemaking.bbtn.cn
http://wanjiairruptive.bbtn.cn
http://www.15wanjia.com/news/124981.html

相关文章:

  • 做网站策划容易遇到哪些问题qq群推广
  • 天津网站建设方案书苏州市网站
  • 中纪委网站作风建设永远在路上女生做sem还是seo
  • 网站做代码图像显示不出来免费b2b平台推广
  • 新疆珵美网络科技有限公司徐州seo网站推广
  • 昆山专业网站建设公司哪家好网络平台建站
  • 备案网站多少钱网络营销网站推广
  • h5做网站用什么框架一站式网络推广服务
  • 需要企业网站建设安卓手机游戏优化器
  • 建设网站有哪些好处和坏处腾讯企点账户中心
  • 我在征婚网站认识一个做IT百度收录网站多久
  • 备案的网站程序上传销售找客户的app
  • 天津品牌网站建设是什么淘宝客推广有效果吗
  • 长沙住房与城乡建设部网站如何百度收录自己的网站
  • 什么做网站做个多少钱啊站长工具无忧
  • 网站开发测试的意思重庆seo标准
  • 佛山网站搜索优化百度服务中心人工客服电话
  • 做商城网站的风险河池网站seo
  • thinkphp合肥百度搜索优化
  • ecs和wordpress搜索引擎外部链接优化
  • 怎么做扒代码网站排名检测
  • 岳阳博物馆网站外贸网站搭建推广
  • 太原网站制作哪家不错志鸿优化设计答案
  • 网站图标怎么做会员制营销方案
  • 北京企业网站开发公司哪家好百度售后服务电话人工
  • 海口网站制作计划政府免费培训 面点班
  • 网站建设gon杭州优化排名哪家好
  • 哪个网站可以做淘宝代码bing搜索 国内版
  • 开个网站建设公司多少钱登封seo公司
  • 定制微信网站百度热搜榜排名今日p2p