当前位置: 首页 > 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

面试公司

相关文章:

  • 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)类型的成员序列化和反序列化
  • 巴基斯坦对印度发起网络攻击,致其约70%电网瘫痪
  • 长期对组织隐瞒真实年龄,广元市城发集团原董事韩治成被双开
  • 云南一餐馆收购长江野生鱼加工为菜品,被查处罚款
  • 晋级中部非省会第一城,宜昌凭什么
  • 最快3天开通一条定制公交线路!上海推出服务平台更快响应市民需求
  • 九家企业与上海静安集中签约,投资额超10亿元