国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > php教程 > leetcode042:Trapping Rain Water

leetcode042:Trapping Rain Water

来源:程序员人生   发布时间:2015-08-13 08:11:56 阅读次数:3191次

问题描写

Trapping Rain Water 

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!

问题分析

这道题目解题思路可以参考leetcode011:Container With Most Water 的分析,leetcode011是求围住的最大面积,这里有所区分,统计“装水”面积,还是从两边向中间扫描,时间复杂度O(n)。 这里设置1个水平面h,表示当前围住的高度,如果后续扫面到的比h低,说明可以装水,统计;如果比h高,更新h便可。

代码

//运行时间:13ms class Solution { public: int trap(vector<int>& height) { int i = 0, j = height.size()⑴; int ans = 0; int h = 0; while (j-i >= 0){ if (height[i] > height[j]){ if (height[j] <= h){ ans += (h - height[j]); } else{ h = height[j]; } j--; } else if (height[i] < height[j]){ if (height[i] <= h){ ans += (h - height[i]); i++; } else{ h = height[i]; } } else{ if (height[i] <= h){ if (i != j) ans += 2 * (h - height[i]); else ans += (h - height[i]); } else{ h = height[i]; } i++; j--; } } return ans; } };


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生