*42. Trapping Rain Water 接雨水
1. 原始题目
给定 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
2. 思路
最简单的想法:对于每个元素都要考虑它能接多少雨水:
第一个元素是0,能接0雨水
第二个元素是1,能接0雨水
第三个元素是0,能接1雨水
...
第六个元素是0,能接2雨水。
可以看到,每个元素能接的雨水量是:当前位置左边最高的数与右边最高的数的最小值减去当前位置的数。
例如第六个元素接水量为2 = min(2,3)-0=2。
总结:对于每个位置,都考虑其左边最高的墙和右边最高的墙即可。
3. 解题
思路图:
class Solution:
def trap(self, height):
if not height: return 0
n = len(height)
left,right = [0]*n, [0]*n # 每个位置都存放其左边最大值和右边最大值
temp = 0
for i in range(n):
temp= max(temp,height[i]) # 找每个元素的左边最大值(含自身)
left[i] = temp
temp = 0
for i in range(n-1,-1,-1):
temp = max(temp,height[i]) # 找每个元素的右边最大值(含自身)
right[i] = temp
res = 0
for i in range(n):
res+=min(left[i],right[i])-height[i] # 最小的高度值-自身
return res
方法2. 双指针法
还是一个思路:当前位置需要左右两堵墙的最小值减去当前值。
左右两端各设定一个指针,初始两堵墙。如果左端小于右端,则以右端为墙,当前值等于左墙和右墙的最小值减去当前值。
class Solution:
def trap(self, height):
if not height: return 0 left, right = 0 , len(height)-1 # 左右指针
area = 0
leftwall, rightwall = 0,0 # 左墙和右墙
while(left<right):
if height[left]<height[right]: # 右边高,则以右端为墙
if leftwall>height[left]: # 如果左墙也比当前位置高的话
area+=min(leftwall,height[right])-height[left] # 面积就是两墙最低者减去当前位置的高度
else:
leftwall = height[left] # 否则更新左墙
left+=1
else:
if rightwall>height[right]:
area+=min(rightwall,height[left])-height[right]
else:
rightwall = height[right]
right-=1
return area
*42. Trapping Rain Water 接雨水的更多相关文章
- [LeetCode] 42. Trapping Rain Water 收集雨水
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- 【LeetCode】42. Trapping Rain Water 接雨水 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力求解 保存左右最大值 单调栈 日期 题目地址:ht ...
- 刷题42. Trapping Rain Water
一.题目说明 题目是42. Trapping Rain Water,翻译起来就是"接雨水".给n个非负正数代表高度,每个正数宽度为1,让计算能多少雨水.题目难度是Hard 二.我的 ...
- LeetCode - 42. Trapping Rain Water
42. Trapping Rain Water Problem's Link ------------------------------------------------------------- ...
- [Leetcode][Python]42: Trapping Rain Water
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 42: Trapping Rain Waterhttps://oj.leetc ...
- leetcode#42 Trapping rain water的五种解法详解
leetcode#42 Trapping rain water 这道题十分有意思,可以用很多方法做出来,每种方法的思想都值得让人细细体会. 42. Trapping Rain WaterGiven n ...
- [array] leetcode - 42. Trapping Rain Water - Hard
leetcode - 42. Trapping Rain Water - Hard descrition Given n non-negative integers representing an e ...
- LeetCode 42. Trapping Rain Water 【两种解法】(python排序遍历,C++ STL map存索引,时间复杂度O(nlogn))
LeetCode 42. Trapping Rain Water Python解法 解题思路: 本思路需找到最高点左右遍历,时间复杂度O(nlogn),以下为向左遍历的过程. 将每一个点的高度和索引存 ...
- leetcode 11. Container With Most Water 、42. Trapping Rain Water 、238. Product of Array Except Self 、407. Trapping Rain Water II
11. Container With Most Water https://www.cnblogs.com/grandyang/p/4455109.html 用双指针向中间滑动,较小的高度就作为当前情 ...
随机推荐
- 高橋君とカード / Tak and Cards AtCoder - 2037 (DP)
Problem Statement Tak has N cards. On the i-th (1≤i≤N) card is written an integer xi. He is selectin ...
- (五)jdk8学习心得之默认方法
五.默认方法 1. 使用方法:写在接口中,就是为了接口可以做一些事情. 2. 目的:有很多实现类,有一个公共的抽象方法,其实这些实现类实现该抽象方法的内容是完全一致的,完全没有必要都重新实现一遍.并且 ...
- Linux centos yum仓库 自制
内网下Yum仓库搭建配置 1.实验环境 虚拟机环境: VMware 12 版本虚拟机 网络环境: 内网 IP 段:172.16.1.0 外网 iP 段(模拟):10.0.0.0 实验基础:(能够上网, ...
- elk部署之前注意事项
注意事项: 1.不能使用root用户登录,需要是用root 之外的用户登录到系统. 2.centos系统 运行内存不能小于2G,若低于2G需要修改jvm. vi {jvm_home}/config/ ...
- PS 怎么去掉图片上的文字
第一步:打开需要去掉文字的图片. 第二步:在左侧工具栏中选择“吸管工具”. 第三步:在文字附近选取颜色. 第四步:在左侧工具栏中选择“矩形选框工具”,并选中要消除的文字. 第五步:在菜单栏“编辑”中选 ...
- html中title小图标的实现
<link rel="icon" href="picture.ico" type="image/x-icon"/> 注意:图片的 ...
- C#进行回文检测,判断字符串是否是回文的代码
下面代码内容是关于C#进行回文检测,判断字符串是否是回文的代码,应该是对各位朋友有些好处. Console.WriteLine("算法1:请输入一个字符串!");string st ...
- IAR使用跳转功能时不正常的情况
@2019-04-12 [小记] [使用环境]IAR-Arm8.30.1 [验证] 均为实测 1. 出现如下图这种情况应该是工程所在路径太深导致 2. 如果不弹出上图警告,但还是不跳转应该是工程编译信 ...
- 堆以及一些用法 QWQ这是写得最认真的板子题
最近一直在学图论,然后吧,由于学的东西实在是太多太杂了,加上蒟蒻本蒻又经常颓,所以落了好多好多板子题的整理没写啊嘤嘤嘤,不过把这些东西学的差不多了,再一块写个整理,其实感觉还不错?????也算是很神奇 ...
- windows下提权基础
拿到webshell很多时候代表渗透的开始,下面带来windows提权基础 环境:虚拟机 win7系统 首先:查看权限whoami 我们知道windows的高权限应该是administrator和sy ...