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

手撕算法-接雨水

描述

image.png

分析

i位置能积累的雨水量,等于其左右两边最大高度的最小值。
为了能获取i位置左右两边的最大高度。使用动态规划。
两个dp数组:

  • leftMax
  • rightMax

其中

  • leftMax[i] 代表i位置左边的最大高度
  • rightMax[i] 代表i位置右边的最大高度

初始状态:

  • leftMax[0] = 0;
  • rightMax[0] =0;

填充这两个dp数组。

那么i位置最终能存的雨水量为:min(eftMax[i] , rightMax[i]) - height[i]

遍历所有位置,即可得到总共能接的雨水数。

image.png

代码

class Solution {
    public int trap(int[] height) {
        int n = height.length;
        int[] leftMax = new int[n];
        int[] rightMax = new int[n];

        leftMax[0] = height[0];
        for (int i = 1; i < n; i++) {
            leftMax[i] = Math.max(leftMax[i - 1], height[i]);
        }

        rightMax[n - 1] = height[n - 1];
        for (int i = n - 2; i >= 0; i--) {
            rightMax[i] = Math.max(rightMax[i + 1], height[i]);
        }

        int res = 0;
        for (int i = 0; i < n; i++) {
            res += Math.min(leftMax[i], rightMax[i]) - height[i];
        }

        return res;
    }
}

image.png

面试公司

http://www.dtcms.com/a/9561.html

相关文章:

  • C语言字符教组占⽤内存怎样算?
  • 海外媒体宣发:十大国外中文网站-大舍传媒
  • 【短接笔记本或者台式机的CMOS针脚解决电脑开机无法启动BIOS无法进入问题】
  • 【几何】平面方程
  • vue3,ref和reactive声明变量有什么区别,分别怎么用
  • Linux虚拟机的安装部署--尚硅谷笔记
  • 桥接模式简介
  • CentOS7 防火墙(firewalld)常规操作
  • 【自然语言处理】统计中文分词技术(一):1、分词与频度统计
  • 语言模型transformers调用部分 (To be continue...
  • 数据库中冗余字段
  • Java 自定义线程池实现
  • [运维] 可视化爬虫易采集-EasySpider(笔记)
  • CSS案例-2.简单版侧边栏练习
  • 通过dbeaver链接dm8数据库
  • redis优化token校验主动失效
  • 基于UDP的网络聊天室
  • rtt的io设备框架面向对象学习-内部调用流程
  • Linux相关命令(2)
  • jackson:JSON字符串(String)类型的成员序列化和反序列化
  • 【运维笔记】VM 记录一次centos虚拟机和宿主机之间ping不通的问题
  • 基于 HBase Phoenix 构建实时数仓(5)—— 用 Kafka Connect 做实时数据同步
  • 【Redis知识点总结】(七)——缓存雪崩、缓存穿透、缓存击穿、Redis高级用法
  • ReaLTaiizor开源.NET winform控件库学习使用
  • Redis 不再“开源”,对中国的影响及应对方案
  • docker仓库登录及配置insecure-registries的方法
  • python基础——数据容器总结、通用方法和相互转换
  • (一)Linux+Windows下安装ffmpeg
  • 【Golang星辰图】创造美丽图表,洞察数据:解析Go语言中的数据可视化和数据分析库
  • 一次完整的 HTTP 请求所经历的步骤