42. 接雨水

42. 接雨水


题目链接:42. 接雨水

代码如下:

//前后缀分解法
//参考:https://www.bilibili.com/video/BV1Qg411q7ia/?spm_id_from=333.788&vd_source=3d719fd194001896c94533664b0320b5
class Solution {
public:
    int trap(vector<int>& height) {
        vector<int> pre_max(height.size());
        vector<int> suf_max(height.size());

        pre_max[0]=height[0];
        suf_max[suf_max.size()-1]=height[height.size()-1];

        //求前缀最大值
        for(int i=1;i<height.size();i++)
        {
            pre_max[i]=max(height[i],pre_max[i-1]);
        }

        //求后缀最大值
        for(int i=height.size()-2;i>=0;i--)
        {
            suf_max[i]=max(suf_max[i+1],height[i]);
        }

        //计算结果
        int res=0;
        for(int i=0;i<height.size();i++)
        {
            res+=min(pre_max[i],suf_max[i])-height[i];
        }

        return res;
    }
};

你可能感兴趣的:(leetcode,c++)