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

杭州高端网站建设可以直接进入网站的正能量

杭州高端网站建设,可以直接进入网站的正能量,国外做任务赚钱的网站有哪些,有网站源码怎么上传想要精通算法和SQL的成长之路 - 接雨水前言一. 接雨水前言 想要精通算法和SQL的成长之路 - 系列导航 一. 接雨水 原题链接 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 输入:height [0,…

想要精通算法和SQL的成长之路 - 接雨水

  • 前言
  • 一. 接雨水

前言

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

一. 接雨水

原题链接

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

在这里插入图片描述
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

题目分析:首先我们从图中想一下,积水的条件是什么?对于每一块的积水区域 ,一定是最右侧的柱子高度 >= 最左侧的柱子高度。 同时对于任何一块积水处,一定有三种元素构成:

  • 右墙。
  • 低洼处(中间部位)
  • 左墙。

这三个元素放到一条直线上,当坐标或者索引来看,他就对应了三个索引。那么这种情况下,对于具有一定的高度排序要求的,我们使用单调栈来解决这个问题。思路如下:

  1. 首先,我们需要计算积水的时候,希望当前找到的柱子肯定是前面找的任何柱子要高。那么我们就可以使用单调递减栈。
  2. 只有更低的柱子能够入栈,毕竟单调递减嘛。然后重点来了。当遇到高的柱子了那怎么办?
  3. 假设当前遇到的柱子索引是right。如图:
    在这里插入图片描述

这个时候,就可以开始计算积水处了。我们需要遍历栈内元素。此时我们可以拿到三个坐标(彼此相邻):

  • 当前遇到的柱子(右墙):right。对应高度就是height[right]
  • 低洼柱子:int bottom = stack.pop()(顺便把他弹出)。对应高度就是height[bottom]
  • 左墙:int left = stack.peek()。只是读,并为弹出哦。对应高度就是height[left]

那么这相邻的三个柱子(实际上可能不相邻,但是计算起来的效果是等价的),他们造成的积水区域面积如图:红色框框部分。
在这里插入图片描述

  • 长:right-left-1
  • 高:Math.min(rightHeight,leftHeight) - bottomHeight
  • 面积就是长乘高喽。

那这是和我们就把计算结果累加到总和上。进入下一次栈元素的遍历。遍历条件:当前柱子高度比栈顶柱子高。那么计算方式和上述一致。
在这里插入图片描述
当栈顶元素高于当前遇到的柱子,那就退出循环,把当前柱子丢到栈里即可。

那么代码编写起来就容易啦:

public int trap(int[] height) {// 雨水总和int count = 0;// 单调栈,递减LinkedList<Integer> stack = new LinkedList<>();// 当前遍历的下标记为rightfor (int right = 0; right < height.length; right++) {// 当遇到的柱子高度 > 栈顶元素的时候,可以开始计算积水了。需要拿到低洼、左墙、右墙while (!stack.isEmpty() && height[stack.peek()] < height[right]) {Integer bottom = stack.pop();// 低洼下标// 特殊情况,如果没有左墙了就没必要循环了,因为构建不成积水if (stack.isEmpty()) {break;}Integer left = stack.peek();// 左墙下标int leftH = height[left];// 左墙高度int bottomH = height[bottom];// 低洼高度int rightH = height[right];// 右墙高度// 长 * 高 计算积水count += (right - left - 1) * (Math.min(leftH, rightH) - bottomH);}// 入栈,上边的while循环保证了这里入栈后的元素总是单调递减的。因为遇到高的,把比他小的全部给出栈了。stack.push(right);}return count;
}
http://www.yidumall.com/news/30602.html

相关文章:

  • 泉州晋江网站建设费用自媒体营销模式有哪些
  • sketch网站花边怎么做百度拉新推广平台
  • 申请完域名怎么做网站网站制作公司怎么找
  • node 做的大型网站关键词有哪些关联词
  • 整合网络营销平台佛山百度seo代理
  • 手机网站在线咨询代码深圳网站建设推广方案
  • 政府网站集约化建设试点工作方案杭州龙席网络seo
  • 域名备案成功如何做网站佛山网站优化
  • 用asp.net做的网站框架北京网站优化经理
  • 用什么做公司宣传网站全能搜
  • dw怎么做鲜花网站海外市场推广方案
  • 字体图标网站营销软文范文200字
  • 做平面的网站河北百度推广客服电话
  • 湖北省建设人力资源网站首页帮人推广的平台
  • 汽车维修保养网站模板关键词分词工具
  • 手机微网站第二年续费吗网站优化策略分析
  • 996建站网站制作互联网营销有哪些方式
  • 投票网站开发如何限制ip百度账号查询
  • 北京网站建设备案网站结构优化
  • 成都地铁小程序google seo怎么做
  • 网站如何接入支付宝网站优化推广平台
  • seo如何分析一个网站网络营销方式有哪几种
  • 转塘有做网站的吗seo排名技巧
  • 铺面怎样做放上网站网站推广如何收费
  • 做qq头像的网站有哪些google搜索关键词热度
  • 做网站每天任务及实训过程微信营销软件免费版
  • 图书馆网站建设毕业论文推广平台排名
  • 信誉好的营销网站建设品牌推广活动有哪些
  • excel 表格 做的网站个人在线做网站免费
  • 岳阳公司网站开发怎么做好seo推广