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.

image

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;
    }
};
原文地址:https://www.cnblogs.com/aiterator/p/6628968.html