LeetCode 42. 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!
很经典的题目。从后往前记录一下, 当前位置上,后面数字的最大值。
然后在从前往后过一遍,用一个数字记录当前位置上前面数字的最大值。然后两者取小就可以了。
class Solution
{
public:
int trap(vector<int>& height)
{
vector<int>vec(height.size());
int mx = 0;
for(int i=height.size() - 1; i >= 0; -- i)
{
if(height[i] > mx)
mx = height[i];
vec[i] = mx;
}
int ans = 0;
mx = 0;
for(int i=0; i<height.size(); ++ i)
{
if(height[i] > mx)
mx = height[i];
if(min(mx, vec[i]) > height[i])
ans += min(mx, vec[i]) - height[i];
}
return ans;
}
};