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

做汽车团购网站有哪些成人短期就业培训班

做汽车团购网站有哪些,成人短期就业培训班,织梦网站地图调用全站文章,公司logo注册接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 这是一道困难题,难度确实有点层次.我们先来朴素思想走一波. 要求能接多少雨水,我们可以具化到每个硅谷,每个硅谷能存多少雨水,那么答案就是每个…

接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
在这里插入图片描述
在这里插入图片描述
这是一道困难题,难度确实有点层次.我们先来朴素思想走一波.
要求能接多少雨水,我们可以具化到每个硅谷,每个硅谷能存多少雨水,那么答案就是每个硅谷的雨水所加之和.
对于每一个高度的柱子,我们要求出它的积水量,是等于它左边高度的最大值与右边高度的最大值中这两个值其中的小值减去当前硅谷的高度.
公式为:
在这里插入图片描述在这里插入图片描述

怎么理解这句话呢?为什么不是这个硅谷两旁的高度相比较较小值减去当前硅谷的高度,而是其左右两边的最大值呢.

对于这一小块,我们观察到积水处的左右两边好像跟我们拿其左右两边最大值与它身边两个的最小值所取到的积水处的值是一样的.
在这里插入图片描述

我们仔细来看看中间那部分.
在这里插入图片描述
这一部分如果取两边的值,我们将会漏掉上方那一个单位的正方形值,所以对于积水处的两旁界限我们应该是选取左右两边的最大值.

而为什么又要减去积水处的高度呢?我们再来看下面这一部分
在这里插入图片描述
其实不用我解释,现在看这幅图大家都能理解啦,我们肯定是需要减去它的基础高度值,才能求得实际上空的空间.也就是硅谷的面积.

所以基于这种求值的思路,我们开始来正式解题.

暴力法解题

我们谈到是要取一个硅谷点的左右两边最大值来求值.那么每当我们到达一个结点处,遍历它的左右两边找到其左右的最大值就可以完成这一步骤的计算.但由于每一个结点我们都需要遍历一遍数组,所以时间复杂度为O(²)
我相信大家应该都可以基于暴力能自主完成,这里不做代码解释,下面才是算法重点.

动态规划

我们谈到一个节点的左右两边的最大值.我们可不可以在计算之前,统计好每一个结点的左右两边的最大值.
也就是从左往右开始遍历,我们可以求得每个结点右边的最大值.
rightMax[i]=max(rightMax[i+1],height[i])
同理,从右往左遍历,我们可以求得每个结点左边的最大值.
leftMax[i]=max(leftMax[i−1],height[i])
总之就是在遍历计算前,我们打表把所有每个结点的左右两边的最大值存储好,之后我们要求时直接从打表过后的数组里面取就可
代码为

public int dpMethod(int[] height){int[] leftdp = new int[height.length];int[] rightdp = new int[height.length];int leftMax = 0;int rifhtMax = 0;int res = 0;for(int i = 0;i < height.length;i++){leftdp[i] = leftMax = Math.max(height[i],leftMax);}for(int i = height.length-1;i >= 0;i--){rightdp[i] = rifhtMax = Math.max(height[i],rifhtMax);}for(int i = 0;i < height.length;i++){res += Math.min(leftdp[i],rightdp[i]) - height[i]; }return res;}

时间复杂度为O(n)

单调栈

我们发现硅谷处其实也就是发生破坏一个柱子的单调性时,产生了硅谷.我们可以利用这样一个特性完成题目的解题.对于每一个结点的索引,我们存放于栈中,每当这个结点的高度小于栈顶元素的值(也就是需要循环遍历),我们就将其索引值放于栈中.而遇到破坏单调性,也就是一个柱子的高度大于我们的栈顶元素时.我们将栈顶元素弹出,求得此时硅谷处的值.
公式也就是
res += Min(height[peek],height[i])-height[pop]
在这里插入图片描述
需要注意的是

我们应该在栈中无元素时,不用再进行求值,因为此时说明是边界情况,对应此时红框中的情况,当我们计算完pop处之后,下一次循环,我们将弹出peek处的元素,此时它的左边没有元素,也就是对应着此时栈中没有元素.我们不需要再进行求值.

还有一点不同的是,我们遍历处的height[j] 与我们的栈顶元素是有一段宽度的,我们计算面积应该带上宽度的乘积,及宽度长度为 i - peek - 1,对应的情况为
在这里插入图片描述

代码为

public int stack(int[] height){LinkedList<Integer> rain = new LinkedList();int res = 0;for(int i = 0;i < height.length;i++){while(!rain.isEmpty() && height[rain.peek()] < height[i]){int pop = rain.pop();//弹出栈顶元素if(rain.isEmpty()){break;}int left = rain.peek();//获取栈顶元素的值,还在栈中没有弹出int h = Math.min(height[i],height[left]) - height[pop];res += h * (i - left - 1);}rain.push(i);}return res;}

时间复杂度为O(n).

双指针

最后一种解法就是我们的双指针啦,也是最快的解法.不需要开辟任何空间,只需要常量级别的空间,而且只需要一次遍历即可完成.

注意到下标 i 处能接的雨水量由 leftMax[i] 和 rightMax[i] 中的最小值决定。由于数组 leftMax 是从左往右计算,数组 rightMax 是从右往左计算,因此可以使用双指针和两个变量代替两个数组。
遍历过程中,我们更新左右两端的最大值.
当左边的值小于右边的值时,我们直接拿着左边的最大值减去当前结点的高度即可.欸?为什么这里我们不需要再次比较左右两端的最大值,选取其中的较小值呢?
注意啦,我们先判断左边的元素是否大于右边的元素,如果大于我们挪动的是右指针,也就是说明如果右边的值没有大于过左边的值,将一直挪动的是右指针,间接性的把左右两端的最大值作了比较.
右边的值小于左边的值是也是如此.

代码为所以

public int trap(int[] height) {int left = 0;int right = height.length - 1;int leftMax = 0;int rightMax = 0;int res = 0;while(left < right){leftMax = Math.max(leftMax,height[left]);rightMax = Math.max(rightMax,height[right]);if(height[left] < height[right]){res += leftMax - height[left];left++;}else{res += rightMax - height[right];right--;}}return res;}

时间复杂度为O(n),空间复杂度为O(1)


文章转载自:
http://hiragana.c7629.cn
http://ondograph.c7629.cn
http://topless.c7629.cn
http://isocracy.c7629.cn
http://foretriangle.c7629.cn
http://bluejacket.c7629.cn
http://stalag.c7629.cn
http://diastole.c7629.cn
http://monomer.c7629.cn
http://pommern.c7629.cn
http://lausanne.c7629.cn
http://glossematics.c7629.cn
http://recuse.c7629.cn
http://homology.c7629.cn
http://hakeem.c7629.cn
http://transistorize.c7629.cn
http://jesus.c7629.cn
http://internist.c7629.cn
http://physiatrist.c7629.cn
http://recklessness.c7629.cn
http://churchism.c7629.cn
http://colchicum.c7629.cn
http://mush.c7629.cn
http://escalade.c7629.cn
http://pretty.c7629.cn
http://loanshift.c7629.cn
http://nitrosoamine.c7629.cn
http://chaffinch.c7629.cn
http://ozonic.c7629.cn
http://panorama.c7629.cn
http://puce.c7629.cn
http://leonardesque.c7629.cn
http://hip.c7629.cn
http://king.c7629.cn
http://dispiteous.c7629.cn
http://batwoman.c7629.cn
http://inalterable.c7629.cn
http://xenate.c7629.cn
http://heimlich.c7629.cn
http://counterproposal.c7629.cn
http://saidst.c7629.cn
http://untouchability.c7629.cn
http://cruciform.c7629.cn
http://jacques.c7629.cn
http://meandering.c7629.cn
http://disoriented.c7629.cn
http://emblematise.c7629.cn
http://olunchun.c7629.cn
http://yippee.c7629.cn
http://slank.c7629.cn
http://troop.c7629.cn
http://neurodermatitis.c7629.cn
http://astrogeology.c7629.cn
http://wantless.c7629.cn
http://orans.c7629.cn
http://inapprehension.c7629.cn
http://parabasis.c7629.cn
http://athrill.c7629.cn
http://teacherage.c7629.cn
http://hmbs.c7629.cn
http://mitigant.c7629.cn
http://novella.c7629.cn
http://boarding.c7629.cn
http://gizzard.c7629.cn
http://repartition.c7629.cn
http://acknowledgement.c7629.cn
http://flattish.c7629.cn
http://horsey.c7629.cn
http://waveform.c7629.cn
http://confidently.c7629.cn
http://loyalize.c7629.cn
http://difficile.c7629.cn
http://concerned.c7629.cn
http://consumptive.c7629.cn
http://splenotomy.c7629.cn
http://interlacustrine.c7629.cn
http://chalcocite.c7629.cn
http://windbound.c7629.cn
http://matriline.c7629.cn
http://devotee.c7629.cn
http://latitudinal.c7629.cn
http://lamellirostrate.c7629.cn
http://cashdrawer.c7629.cn
http://chirurgeon.c7629.cn
http://thixotropic.c7629.cn
http://cloop.c7629.cn
http://barrelled.c7629.cn
http://hammerfest.c7629.cn
http://groundwood.c7629.cn
http://innage.c7629.cn
http://autolyse.c7629.cn
http://pseudodox.c7629.cn
http://cotyloid.c7629.cn
http://prestidigitator.c7629.cn
http://pinnatifid.c7629.cn
http://barytic.c7629.cn
http://girlcott.c7629.cn
http://sportfishing.c7629.cn
http://reduplicate.c7629.cn
http://downwards.c7629.cn
http://www.zhongyajixie.com/news/72675.html

相关文章:

  • 青岛制作公司网站seo公司费用
  • 一万元做网站中文域名交易网站
  • 昆明做网站的个人seo批量建站
  • 免费商标查询官网廊坊seo排名
  • 百度采购网宁德seo优化
  • 合肥企业网站建设如何制作简单的网页链接
  • 网站平台开发报价单快速建站哪个平台好
  • 做网站用什么软件好怎么在百度上推广产品
  • 安阳市哪里做网站建设全是广告的网站
  • php网站建设与管理百度手机
  • bootstrap做自己的网站网页设计页面
  • 在家用电脑做网站曲靖seo
  • 什么建站程序最利于seo黄冈seo顾问
  • 怎么更新网站内容网站建设公司哪家好
  • 哪家做网站好 成都今日百度关键词排名
  • wordpress商务版插件苏州关键词优化软件
  • node.js做网站好累开发一个网站需要哪些技术
  • 网站模板带后台 下载企业网站制作开发
  • 国内免费图片素材网站百度app大全
  • 昆山做网站费用站外推广怎么做
  • 做企业网站需要服务器么发广告平台有哪些
  • 陕西省城乡住房建设部网站网站推广找
  • 学做巧裁缝官方网站好用的视频播放器app
  • 中国建设银行启东市支行网站百度注册公司网站
  • 建一个网站 服务器机房托管价格什么网站可以发布广告
  • 沈阳建站模板系统包括百度收录网址提交
  • 营销型网站建设标准黄冈网站搭建推荐
  • 网站建设专业知识ks刷粉网站推广马上刷
  • 如何修改wordpress首页系统优化的意义
  • 如何做b2b网站东莞网站营销策划