【34.7】【H】【leetcode】Trapping Rain Water
2015-11-28 15:43
489 查看
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given
![](http://www.leetcode.com/wp-content/uploads/2012/08/rainwatertrap.png)
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!
Subscribe to
see which companies asked this question
对某个值A[i]来说,能trapped的最多的water取决于在i之前最高的值leftMostHeight[i]和在i右边的最高的值rightMostHeight[i](均不包含自身)。
如果min(left,right) > A[i],那么在i这个位置上能trapped的water就是min(left,right) – A[i]。
有了这个想法就好办了,第一遍从左到右计算数组leftMostHeight,第二遍从右到左计算rightMostHeight。
时间复杂度是O(n)。
For example,
Given
[0,1,0,2,1,0,1,3,2,1,2,1], return
6.
![](http://www.leetcode.com/wp-content/uploads/2012/08/rainwatertrap.png)
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!
Subscribe to
see which companies asked this question
对某个值A[i]来说,能trapped的最多的water取决于在i之前最高的值leftMostHeight[i]和在i右边的最高的值rightMostHeight[i](均不包含自身)。
如果min(left,right) > A[i],那么在i这个位置上能trapped的water就是min(left,right) – A[i]。
有了这个想法就好办了,第一遍从左到右计算数组leftMostHeight,第二遍从右到左计算rightMostHeight。
时间复杂度是O(n)。
class Solution(object): def trap(self, height): l = len(height) h = height if l < 2: return 0 maxx = h[0] left_max = [0]*l right_max = [0]*l left_max[0] = -1#h[0] for i in range(1,l): left_max[i] = maxx maxx = max(maxx,h[i]) maxx = h[l-1] right_max[l-1] = -1#h[l-1] for i in range(l-2,-1,-1): right_max[i] = maxx maxx = max(maxx,h[i]) #print left_max #print right_max res = 0 for i in range(0,l): t = min(left_max[i],right_max[i]) - h[i] if t > 0: res += t return res
相关文章推荐
- Android 系统稳定性 - ANR(三)
- Android 系统稳定性 - ANR(二)
- Android最新敲诈者病毒分析及解锁(11月版)
- Android 系统稳定性 - ANR(一)
- Android 资源Id工具类
- !cocos2d 重复添加action事件
- 浅谈Android系统的图标设计规范
- Android ActionBar的使用
- Android Studio 快捷键
- Android 欢迎界面
- android5.x新特性之Tinting
- AndroidStudio快速入门三:aar和jar 生成和导入项目
- Android屏幕图标尺寸规范
- Android的消息处理机制,AsyncTask源码解析
- android MVP 设计模式
- android抓日志
- iOS开发中那些高效常用的宏
- android 让线程睡一段时间的操作代码
- iOS开发 多视角抛析匿名函数—— Block
- 第一行代码总结:13.4调试android程序