LeetCode 42. 接雨水

题目链接

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

LeetCode 42. 接雨水_第1张图片

题目解析

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

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

        首先定义两个数组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& height) 
    {
        int n=height.size();
        // 创建数组
        vector left_Max(n),right_Max(n);
        left_Max[0]=height[0];
        right_Max[n-1]=height[n-1];
        // 给两个数组赋值
        for(int i=1;i=0;i--) right_Max[i]=max(right_Max[i+1],height[i]);

        // 遍历求和
        int sum=0;
        for(int i=0;i

你可能感兴趣的:(算法练习,leetcode,算法)