【34.7】【H】【leetcode】Trapping Rain Water
2015-11-28 15:43
465 查看
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
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.
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程序