Trapping Rain Water
2015-10-02 16:11
387 查看
题目:
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!
分析:
之前是柱子,问可以装多少水
用两个指针从两端往中间扫,在当前窗口下,如果哪一侧的高度是小的,那么从这里开始继续扫,如果比它还小的,肯定装水的瓶颈就是它了,可以把装水量加入结果,如果遇到比它大的,立即停止,重新判断左右窗口的大小情况,重复上面的步骤。这里能作为停下来判断的窗口,说明肯定比前面的大了,所以目前肯定装不了水(不然前面会直接扫过去)。这样当左右窗口相遇时,就可以结束了,因为每个元素的装水量都已经记录过了。
参考代码:
http://blog.csdn.net/linhuanmars/article/details/20888505
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
[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!
分析:
之前是柱子,问可以装多少水
用两个指针从两端往中间扫,在当前窗口下,如果哪一侧的高度是小的,那么从这里开始继续扫,如果比它还小的,肯定装水的瓶颈就是它了,可以把装水量加入结果,如果遇到比它大的,立即停止,重新判断左右窗口的大小情况,重复上面的步骤。这里能作为停下来判断的窗口,说明肯定比前面的大了,所以目前肯定装不了水(不然前面会直接扫过去)。这样当左右窗口相遇时,就可以结束了,因为每个元素的装水量都已经记录过了。
参考代码:
http://blog.csdn.net/linhuanmars/article/details/20888505
public class Solution { public int trap(int[] A) { if(A==null || A.length ==0) return 0; int l = 0; int r = A.length-1; int res = 0; while(l<r) { int min = Math.min(A[l],A[r]); if(A[l] == min) { l++; while(l<r && A[l]<min) { res += min-A[l]; l++; } } else { r--; while(l<r && A[r]<min) { res += min-A[r]; r--; } } } return res; } }
相关文章推荐
- iOS 多线程的使用(GCD)
- iOS 多线程的使用(Operation)
- unity3d 学习笔记(三)
- Objective-C中的一些特殊的数据类型 SEL、id、@、nil、Nil
- Unity 3D飞机大战制作心得
- swift的类与对象讲解
- iOS 多线程实例(自定义NSOperation并传值(block,notification))
- swift的函数与闭包
- swift语法讲解及简单入门教程
- Android Design: 九种常见Activity及代码解析之"Navigation Drawer Activity"
- Android控件布局属性全解
- android布局属性大全
- swift闭包
- iOS 多线程实例(NSThread售票窗口的模拟)
- swift函数
- happens-before规则解析
- iOS开发TTS技术即文本转语音
- 微信支付文档链接
- iOS多线程使用实例(异步下载图片的时候不会阻塞主线程的执行)
- 【Android】Camera 使用浅析