当前位置: 首页 > article >正文

力扣每日一题day26[42. 接雨水]

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 

示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

按照列方向计算,只要记录左边柱子的最高高度和右边柱子的最高高度,就可以计算出当前位置雨水的面积;当前位置的雨水面积=[min(左边柱子的最高高度,右边柱子的最高高度)-当前柱子高度]x1

使用双指针来遍历,每到一个柱子都向两边遍历一遍,会有重复计算,我们将每个位置左边最高高度记录在一个数组中,右边最高高度记录在一个数组中

当前位置左边最高高度是前一个位置左边最高高度和本高度比较后的最大值

  • 从左向右:maxLeft[i]=max(height[i],maxLeft[i])

  • 从右向左:maxRight[i]=max(height[i],maxRight[i+1])

class Solution {
    public int trap(int[] height) {
        int len=height.length;
        if(len<=2) return 0;
        int[] maxLeft=new int[len];
        int[] maxRight=new int[len];
​
        maxLeft[0]=height[0];
        for(int i=1;i<len;i++){
            maxLeft[i]=Math.max(height[i],maxLeft[i-1]);
        }
​
        maxRight[len-1]=height[len-1];
        for(int i=len-2;i>=0;i--){
            maxRight[i]=Math.max(height[i],maxRight[i+1]);
        }
​
        int sum=0;
        for(int i=0;i<len;i++){
            int count=Math.min(maxLeft[i],maxRight[i])-height[i];
            if(count>0) sum+=count;
        }
        return sum;
    }
}

http://www.kler.cn/news/155441.html

相关文章:

  • 游泳馆会员服务预约管理系统预约小程序效果如何
  • TypeScript 的安装与使用
  • python每日一题——21搜索二维矩阵
  • JVM——内存溢出和内存泄漏
  • 【知识】稀疏矩阵是否比密集矩阵更高效?
  • python动态圣诞下雪图
  • vue-历史模式部署
  • 【面试HOT200】回溯篇
  • Node.js版本管理工具NVM(Node Version Manager)的使用
  • leetcode - 矩阵区域和
  • 第十五届蓝桥杯模拟赛(第二期)
  • 软件生命周期四个阶段SDLC
  • Day59权限提升-win溢出漏洞ATSCps提权
  • 三菱(MITSUBISHI)CNC数据采集
  • 打印时如何让打印字体更加平滑 不那么锯齿化
  • csapp-linklab
  • AArch64中的虚拟化
  • 【Android】Retrofit创建实例源理
  • Flyway 数据库版本管理 | 专业解决方案
  • 31、LCD1602功能函数代码
  • AURIX TC芯片中DSU实现安全启动
  • Excel 分列功能
  • 20、Resnet 为什么这么重要
  • Go语言 值传递
  • 【蓝桥杯软件赛 零基础备赛20周】第6周——栈
  • 分析实现HarmonyOS中的Linux内核架构模式
  • 2312skia,17路径和api概述
  • 【go语言开发】loglus日志框架的使用
  • mysql8.0 提取json数据转为行
  • 基于SpringBoot+Vue实现的前后端分离课程管理系统