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

大同市住房与城乡建设厅网站建站公司

大同市住房与城乡建设厅网站,建站公司,怎样建网站步骤,义乌网站优化目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 42. 接雨水 - 力扣(LeetCode) 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例1 输入&…

目录

题目来源

题目描述

示例

提示

题目解析

算法源码


题目来源

42. 接雨水 - 力扣(LeetCode)

题目描述

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

示例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 个单位的雨水(蓝色部分表示雨水)。 

示例2

输入:height = [4,2,0,3,2,5]
输出:9

提示

  • n == height.length
  • 1 <= n <= 2 * 10^4
  • 0 <= height[i] <= 10^5

题目解析

本题要计算所有柱子的储水量之和,而这个和其实可以分解求解每一个柱子的储水量。

而一个柱子要想储存住水,则必然在其左边有一根高柱,在其右边也有一根高柱,因为这样才能形成“凹”,才能在中间的低柱子上存储住水。 

并且,中间低柱子的储水量取决于,其左边“最高的”柱子,和其右边“最高的”柱子的较矮者,比如下图中:

 绿色箭头指向的低柱子的储水量取决于:其左边最高柱子,和其右边最高柱子的较矮者。

因此,本题其实是要我们求解每一根柱子的:

  • 左边最高柱子高度
  • 右边最高柱子高度

这个求解,可以使用动态规划来做:

我们假设第 i 根柱子的高度为 h[i],第 i 根柱子的左边最高柱子高度表示为left[ i ]

则第 i 根柱子的左边的最高柱子高度为:

left[ i ] = max( left[ i - 1 ], h[ i - 1 ] )

什么含义呢?

第 i 根柱子左边的最高柱子:

  • 要么是 第 i - 1 根柱子,即h[ i - 1 ]
  • 要么是 第 i - 1 根柱子的左边的最高柱子,即 left[ i - 1 ]

我们只要从左到右完成left数组的初始化即可。

同理,可得:

right[ i ] = max( right[ i + 1 ], h[ i + 1 ] )

此时需要从右往左完成right数组的初始化。

这样的话,第 i 根柱子的储水量

取决于其左边最高柱子,和其右边最高柱子的较矮者,即min(left[ i ], right[ i ])

第 i 根柱子的储水量val = min(left[ i ], right[ i ]) - h[ i ]

注意val最小为0,不能为负数。因此最终第 i 根柱子的储水量计算公式为:

max(0, min(left[ i ], right[ i ]) - h[i])

我们只要累加每根柱子的储水量即为题解。

Java算法源码

class Solution {public int trap(int[] h) {int n = h.length;// left[i] 表示 第 i 根柱子的左边的最高的柱子的高度int[] left = new int[n];for(int i=1; i<n; i++) {// 第 i 根柱子左边最高的柱子要么是h[i-1],即第i-1根柱子的高度,要么是left[i-1],即第i-1根柱子的左边的最高的柱子的高度left[i] = Math.max(left[i-1], h[i-1]);}// right[i] 表示 第 i 根柱子的右边的最高的柱子的高度int[] right = new int[n];for(int i=n-2; i>=0; i--) {// 第 i 根柱子右边最高的柱子要么是h[i+1],即第i+1根柱子的高度,要么是right[i+1],即第i+1根柱子的右边的最高的柱子的高度right[i] = Math.max(right[i+1], h[i+1]);}int ans = 0;for(int i=1; i<n-1; i++) {// 第i根柱子最多能蓄水的量,取决于其左边最高的柱子和右边最高的柱子的较矮的那个,且较矮的那根柱子 - 第i根柱子的高度就是第i根柱子的蓄水量,注意蓄水量最少为0ans += Math.max(0, Math.min(left[i], right[i]) - h[i]);}return ans;}
}

JS算法源码

/*** @param {number[]} height* @return {number}*/
var trap = function(h) {const n = h.length// left[i] 表示 第 i 根柱子的左边的最高的柱子的高度const left = new Array(n).fill(0)for(let i=1; i<n; i++) {// 第 i 根柱子左边最高的柱子要么是h[i-1],即第i-1根柱子的高度,要么是left[i-1],即第i-1根柱子的左边的最高的柱子的高度left[i] = Math.max(left[i-1], h[i-1])}// right[i] 表示 第 i 根柱子的右边的最高的柱子的高度const right = new Array(n).fill(0)for(let i=n-2; i>=0; i--) {// 第 i 根柱子右边最高的柱子要么是h[i+1],即第i+1根柱子的高度,要么是right[i+1],即第i+1根柱子的右边的最高的柱子的高度right[i] = Math.max(right[i+1], h[i+1])}let ans = 0for(let i=1; i<n-1; i++) {// 第i根柱子最多能蓄水的量,取决于其左边最高的柱子和右边最高的柱子的较矮的那个,且较矮的那根柱子 - 第i根柱子的高度就是第i根柱子的蓄水量,注意蓄水量最少为0ans += Math.max(0, Math.min(left[i], right[i]) - h[i])}return ans
};

Python算法源码

class Solution(object):def trap(self, h):""":type height: List[int]:rtype: int"""n = len(h)# left[i] 表示 第 i 根柱子的左边的最高的柱子的高度left = [0]*nfor i in range(1, n):# 第 i 根柱子左边最高的柱子要么是h[i-1],即第i-1根柱子的高度,要么是left[i-1],即第i-1根柱子的左边的最高的柱子的高度left[i] = max(left[i-1], h[i-1])# right[i] 表示 第 i 根柱子的右边的最高的柱子的高度right = [0]*nfor i in range(n-2,0,-1):# 第 i 根柱子右边最高的柱子要么是h[i+1],即第i+1根柱子的高度,要么是right[i+1],即第i+1根柱子的右边的最高的柱子的高度right[i] = max(right[i+1], h[i+1])ans = 0for i in range(1, n-1):# 第i根柱子最多能蓄水的量,取决于其左边最高的柱子和右边最高的柱子的较矮的那个,且较矮的那根柱子 - 第i根柱子的高度就是第i根柱子的蓄水量,注意蓄水量最少为0ans += max(0, min(left[i], right[i]) - h[i])return ans

http://www.ritt.cn/news/23565.html

相关文章:

  • p2p网站如何做测试工具百度广告联盟怎么加入
  • 万能视频解析接口网站怎么做网址大全123
  • 上海南京东路网站建设网页制作软件手机版
  • 苏州前几天网站建设分发平台
  • wordpress页面添加分类目录广东知名seo推广多少钱
  • 网站规划怎么写网页模板源代码
  • 中英文网站如何做思路sem是什么设备
  • 门户网站开发要多少钱郑州模板建站代理
  • 潍坊专升本考点长春网站优化哪家好
  • 如何做网站的外链搜什么关键词比较刺激
  • 邯郸网站建设唯辛ls15227女生seo专员很难吗为什么
  • 大气金融网站宁德市疫情
  • 做网站需要材料营销策略国内外文献综述
  • 仿新浪首页网站模板成都本地推广平台
  • 重庆网站建设要点排行榜123网
  • 新疆生产建设兵团水利局网站爱站网关键词挖掘工具
  • 营销网站建设苏州网站设计公司建设网站
  • 网站开发的未来发展seo是什么意思 职业
  • 网站维护的方式包括北京最新疫情情况
  • 开发网站合作协议seo优化网站优化
  • 典型的o2o平台有哪些湘潭网站seo
  • wordpress不能自定义sem优化师
  • 网站域名每年费用沈阳网站seo公司
  • wordpress网站好做排名吗电脑优化大师有用吗
  • 彩页设计图片西安优化排名推广
  • 空白的网站怎么建设网站推广的技巧
  • jquery+js网站模板免费下载百度下载安装
  • 深圳网站建设 联雅如何提交百度收录
  • 山东省建设厅网站特种作业武汉百度推广电话
  • html简单网站开发案例it培训机构培训费用