leetcode 42.接雨水

在这里插入图片描述

问题1:怎么算接水量

  • 总的接水量=第一列接水量+第二列接水量+第三列接水量+…+最后一列接水量

问题2:当前列的接水量怎么计算

  • 当前的接水量=min(当前列左边最高的墙x1,当前列右边最高的墙x3)- 当前列x2的高度

问题2图解:

在这里插入图片描述

方法:预处理每一列左边最高的墙+预处理每一列右边最高的墙(记录下标)

class Solution 
{
   
public:
    int trap(vector<int>& height) 
    {
   
        int n=height.size();
        int leftMax[n],rightMax[n];
        memset(leftMax,0,sizeof(int)*n);
        memset(rightMax,0,sizeof(int)*n);
        int lmax=height[0]; 
        int rmax=height[n-1];
        for(int i=1;i<n;i++)   //预处理,没自己写看起来有点小难懂,自己模拟写一个即可
        {
   
            leftMax[i]=lmax;
            lmax=max(lmax,height[i]);
            rightMax[n-i-1]=rmax;
            rmax=max(rmax,height[n-i-1]);
        }
        int sum=0;
        for(int i=1;i<n-1;i++)  //一列一列的算,为什么不算第一列和最后一列,因为最左边和最右边就是边界,相当于最后的墙
        {
   
            if(min(leftMax[i],rightMax[i])<=height[i])continue;
            sum+=min(leftMax[i],rightMax[i])-height[i];
        }
        return sum;
    }
};

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-28 11:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-28 11:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-28 11:42:02       82 阅读
  4. Python语言-面向对象

    2024-01-28 11:42:02       91 阅读

热门阅读

  1. 从二叉树角度来理解快速排序

    2024-01-28 11:42:02       50 阅读
  2. 【WebGPU】简介和开始

    2024-01-28 11:42:02       48 阅读
  3. 深入了解 Spring BeanPostProcessor 的应用

    2024-01-28 11:42:02       50 阅读
  4. 使用virtualenv管理python环境

    2024-01-28 11:42:02       56 阅读
  5. redis为什么用单线程模型

    2024-01-28 11:42:02       57 阅读
  6. git删除本地分支,拉取远程分支到本地新分支

    2024-01-28 11:42:02       46 阅读
  7. 16. Spring Boot启用HTTPS

    2024-01-28 11:42:02       54 阅读
  8. 【算法题】77. 组合

    2024-01-28 11:42:02       51 阅读