Leetcode#42. 接雨水

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_20177327/article/details/82151900

解题思路:

  • 可以发现被水填满后的形状是先升后降的塔形,因此,先遍历一遍找到塔顶,然后分别从两边开始,往塔顶所在位置遍历,水位只会增高不会减小,且一直和最近遇到的最大高度持平,这样知道了水位,就可以边遍历边计算面积;
class Solution {
public:
    int trap(vector<int>& height) 
    {
        if(height.size() <= 2)
            return 0;
        int temp = height[0];
        int index = 0;
        //找到塔形
        for(int i = 0; i < height.size(); ++i)
        {
            if(height[i] > temp)
            {
                temp = height[i];
                index = i;
            }
        }

        int max_left = height[0];
        int max_right = height[height.size() - 1];
        int area = 0;
        //从左往塔形
        for(int i = 0; i < index; ++i)
        {
            max_left = max(max_left, height[i]);
            area  = area + (max_left - height[i]);
        }
        //从右到塔形
        for(int j = height.size() - 1; j > index; --j)
        {
            max_right = max(max_right, height[j]);
            area  = area + (max_right - height[j]);
        }
        return area;
    }
};

猜你喜欢

转载自blog.csdn.net/sinat_20177327/article/details/82151900
今日推荐