[LeetCode]42. 接雨水(双指针,DP)】的更多相关文章

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/trapping-rain-wate…
地址 https://leetcode-cn.com/problems/trapping-rain-water/ 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 示例: 输入: [,,,,,,,,,,,] 输出: 解答 暴力遍历的时候 如果起点较低的一端 那么遇到较高的一端  就可以计算盛水体积 但是如果起点是较高的一端 就不好确定终点. 使用双指针确定盛水段落的左右断点 如果左边较低就从左边开始寻找比他等于或者大于的终点 如果右边较低就从右边…
42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 class Solution { public int trap(int[] height) { int n = height.l…
题目链接 https://leetcode-cn.com/problems/trapping-rain-water/ 题目说明 题解 主要方法:双指针 + 正反遍历 解释说明: 正向遍历:先确定池子左墙初始化为第一个bar,从第 2 个 bar 开始遍历右墙,同时记录中间的 bar 高度和,当右墙大于等于左墙的时候就有第一滩积水了,[左右墙距离 * 左墙高度 - 中间 bar 和] 就是这滩积水的体积,同时将右墙认定为下一个左墙,同时重新记录bar高度和. 反向遍历:和正向遍历一样,先确定池子右…
接雨水解法详解: 题目: 基本思路:从图上可以看出要想接住雨水,必须是凹字形的,也就是当前位置的左右两边必须存在高度大于它的地方,所以我们要想知道当前位置最多能存储多少水,只需找到左边最高处max_left和右边最高处max_right,取他们两个较小的那边计算即可(短板效应). 其实接下来的解法要解决的问题就是如何找到max_right和max_left. 不过我们首先来看一个无法AC的解法: 解法一:按行 按行顾名思义就是一行一行地进行计算,首先我们计算第一行,设置一个变量temp临时存储当…
题目: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解题思路: class Solution { public int trap(int[] height) { // 至少三块方可积水 if…
接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 这道题立马让我想到了之前做过的一道求两条柱子间面积的题.此题使用了类似的方法.我们不用仔细地计算每个"容器的装水"容量.我们只需…
题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解题思路 基本思想是从数组首位置找到第一个大于其紧邻后面的数,将它作为第一个雨槽的左挡板,然后向后遍历找到第一个不小于它的的数作为右挡板…
按行求解的思路比较清晰明了,但是这个方法的复杂度高达O(heightSize*sum(height[i])),几乎高达O(N^2). 但是也并不是不可以解决,经观察我们可以发现,这个算法的缺点在于要遍历每一个柱体的每一个高度,所以解决的时就要从这个点着手. 设之前已经存在的柱体的最高高度为bp,当前柱体的高度为h,则如果h<=bp,说明该高度和它以下的高度已经出现过,我们更新该高度的end位置(end一直增加,所以不需要比较). 但是,如果bp<h,说明只有bp以下的高度之前出现过,我们只能更…
LeetCode:接雨水[42] 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水). 感谢 Marcos 贡献此图. 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 题目分析 简要思路 找出最高点 分别从两边往最高点遍历:如果下一个数比当前数小,说明可以接到水 视频分…