LeetCode 42. 接雨水

该博客围绕LeetCode接雨水问题展开。先给出题目链接,接着进行题目解析,通过计算每个位置的面积并相加得到最终可接雨水量。每个位置面积由左右最大高度的最小值减去当前高度得出,还给出了代码实现思路及初始化细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目解析

        先算出每个位置的面积,然后把每个位置的面积相加就得到了最终可以接多少雨水!

        每个位置的面积等于(该位置左边包括自己最大的高度)与(该位置右边包括自己最大的高度)中最小的那个数,然后减去当前位置的高度,就是当前位置可以存放的雨水。

        首先定义两个数组left_Max,right_Max来去计算每个位置的雨水可以到达的最大高度,然后遍历height用每个位置雨水达到的最大高度减去当前位置的高度,相加之后返回结果即可。

        细节:需要初始化 left_Max[0]=height[0]      如果左边没有元素的情况下直接取自己即可

               需要初始化 right_Max[n-1]=height[n-1] 如果右边没有元素的情况下直接取自己即可

代码

class Solution 
{
    // 动态规划
    // 每个位置的面积等于(该位置左边包括自己最大的高度)与(该位置右边包括自己最大的高度)中最小的那个数
    // 减去当前位置的高度,就是当前位置可以存放的雨水
    // 首先定义两个数组left_Max,right_Max来去计算每个位置的雨水可以到达的最大高度
    // 然后遍历height用每个位置雨水达到的最大高度减去当前位置的高度
    // 相加之后返回结果即可

    // 细节:
    // 需要初始化 left_Max[0]=height[0]      如果左边没有元素的情况下直接取自己即可 
    // 需要初始化 right_Max[n-1]=height[n-1] 如果右边没有元素的情况下直接取自己即可 
public:
    int trap(vector<int>& height) 
    {
        int n=height.size();
        // 创建数组
        vector<int> left_Max(n),right_Max(n);
        left_Max[0]=height[0];
        right_Max[n-1]=height[n-1];
        // 给两个数组赋值
        for(int i=1;i<n;i++) left_Max[i]=max(left_Max[i-1],height[i]);
        for(int i=n-2;i>=0;i--) right_Max[i]=max(right_Max[i+1],height[i]);

        // 遍历求和
        int sum=0;
        for(int i=0;i<n;i++)
        {
            sum+=min(left_Max[i],right_Max[i])-height[i];
        }
        return sum;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁百万

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值