程序员人生 网站导航

leetcode042:Trapping Rain Water

栏目:php教程时间:2015-08-13 08:11:56

问题描写

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; } };


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐