LeetCode : Trapping Rain Water (java)
2016-04-06 00:38
681 查看
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!
思路:先找到最高点,从两侧到最高点只增不减,发现减少的,即需要“加水”填平,由此可以计算出盛水量。
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!
思路:先找到最高点,从两侧到最高点只增不减,发现减少的,即需要“加水”填平,由此可以计算出盛水量。
public class Solution { public int trap( int[] height ) { if ( height == null || height.length <= 2 ) { return(0); } int area = 0; /* 找到最高点 */ int max = height[0], maxIndex = 0; for ( int i = 1; i < height.length; ++i ) { if ( height[i] > max ) { max = height[i]; maxIndex = i; } } /* 左侧遍历 */ int left = height[0]; for ( int i = 1; i < maxIndex; ++i ) { if ( left < height[i] ) { left = height[i]; }else{ area += left - height[i]; } } /* 右侧遍历 */ int right = height[height.length - 1]; for ( int i = height.length - 1; i > maxIndex; --i ) { if ( right < height[i] ) { right = height[i]; }else{ area += right - height[i]; } } return(area); } }
相关文章推荐
- Cocos2d-x 3.10 环境搭建
- OC阅读笔记十三:ARC(下)
- Android Converty问题解决方案
- android oom 内存优化入门,工具mat简单使用(
- How To Make a Music Visualizer in iOS
- Objective-C中的面向对象编程
- Android WebView加载页面的输入框被软键盘遮挡的问题
- Android之Button
- iOS 商城开发
- 手机直播程序 、手机直播系统、 手机APP直播源码 、手机APP直播程序云豹直播
- 利用这个利器!微信运营月入上万不再是问题
- iOS根据字符使用滤镜动态生成二维码 重绘图片增加二维码的清晰度
- EventBus Demo
- iTween基础之iTweenPath(自定义路径移动)
- Android 图片 滤镜效果 通过矩阵实现
- java对接微信开发模式的代码
- Android关键概念
- ios category,protocol理解
- 月薪过万,只因为我选择了蜂窝教育iOS培训
- [10秒学会] - iOS kvo 使用(demo)