LeetCode 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

提示:

  • n == height.length
  • 1 <= n <= 2 * 104
  • 0 <= height[i] <= 105

二、思路分析

本题的解法有很多,这里使用动态规划进行解答。首先,动态规划是:通过将原问题分解为相对简单的子问题的方式求解复杂问题的方法。

根据本题题意,我们需要找到存在凹槽的地方,这样才能够积攒雨水。首先创建两个数组,maxLeft [i] 代表第 i 列左边最高的墙的高度,maxRight [i] 代表第 i 列右边最高的墙的高度。(要注意下,第 i 列左(右)边最高的墙,是不包括自身的)

对于 maxLeft 我们可以这样求:

maxLeft[i] = Math.max(maxLeft[i - 1], height[i - 1]); 它前边的墙的左边的最高高度和它前边的墙的高度选一个较大的,就是当前列左边最高的墙了。

对于 maxRight 我们可以这样求:

maxRight[i] = Math.max(maxRight[i + 1], height[i + 1]); 它后边的墙的右边的最高高度和它后边的墙的高度选一个较大的,就是当前列右边最高的墙了。

三、代码参考

1、Java

class Solution {
    public int trap(int[] height) {
        // 用来计算最终结果,初始值为 0
        int sum = 0;
        // 创建数组 maxLeft,用来表示第 i 列左边最高的墙
        int[] maxLeft = new int[height.length];
        // 创建数组 maxRight,用来表示第 i 列右边最高的墙
        int[] maxRight = new int[height.length];
        // 循环遍历,获得数组中每一列左边最高的墙
        for(int i = 1; i < height.length; i++){
            // 获得第 i 列左边最高的墙
            maxLeft[i] = Math.max(maxLeft[i - 1], height[i - 1]);
        }
        // 循环遍历,获得数组中每一列右边最高的墙
        for(int i = height.length - 2; i >= 0; i--){
            // 获取第 i 列右边最高的墙
            maxRight[i] = Math.max(maxRight[i + 1], height[i + 1]);
        }
        // 通过 maxLeft 和 maxRight 两个数组来获取第 i 列左右两边的墙谁最矮,因为凹槽的积水面积的高度取决于矮的一边
        for(int i = 1; i < height.length; i++){
            // 获取第 i 列左右两边墙高度最小的值
            int min = Math.min(maxLeft[i], maxRight[i]);
            // 如果有凹槽,即当前列的高度小于列左右两边最小的高度
            if(min > height[i]){
                // 计算当前列的积水面积,并汇总
                sum = sum + (min - height[i]);
            }
        }
        // 返回结果
        return sum;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/298902.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode刷题--- 不同路径 II

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

Simply主题 简约风格的Emlog博客模板 响应式布局

主题介绍 Simply是一款简约风格的Emlog博客模板&#xff0c;响应式布局、界面简单大方&#xff0c;实用性强&#xff01; 支持夜间模式&#xff0c;采用localStorage存储配置。IOS系统下支持随系统自动切换浅/深色模式。 文章页支持显示文章字数及阅读时间。 支持http/https …

书摘:C 嵌入式系统设计模式 06

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述原书第 2 章的内容。 作为嵌入…

BetaFlight开源代码之电压校准

BetaFlight开源代码之电压校准 1. 源由2. 分析数据流3. 采样电路3. 原理4. 示例5. 实测&转换数据6. 参考资料 1. 源由 既然复杂的BetaFlight开源代码之电流校准都过了一遍&#xff0c;电压相对来说是比较简单的&#xff0c;一起过一下 2. 分析数据流 电源路径1》采样电路…

Pix2Seq 算法阅读记录

目录 前向传播过程 训练过程&#xff1a; 网络结构 前向传播过程 batch_preds--> tgt-->tgtcat(tgt, padding)-->tgt_embedding-->tgt_mask,tgt_padding_mask 以NLP的角度&#xff0c;tgt 代表了 词汇表的长度&#xff0c;encoder部分直接对图像进行处理&#…

优势演员-评论家算法 A2C

优势演员-评论家算法 A2C 优势演员-评论家算法 A2C主要思想目标函数 优势演员-评论家算法 A2C 前置知识&#xff1a;演员-评论家算法&#xff1a;多智能体强化学习核心框架 主要思想 AC 网络结构&#xff1a; 策略网络 - 演员: 这个网络负责根据当前的状态选择动作。它输出的是…

LabVIEW在指针式仪表读数中的应用

在LabVIEW环境中&#xff0c;为实现指针式仪表的自动读数&#xff0c;首先进行图像预处理&#xff0c;包括图像缩放、灰度化和二值化&#xff0c;以提高处理速度和减少噪声干扰。利用LabVIEW的图像处理功能&#xff0c;灰度化和二值化操作简化了图像的色彩信息&#xff0c;便于…

Java HashMap 面试题(一)

HashMap 面试题&#xff08;一&#xff09; 文章目录 HashMap 面试题&#xff08;一&#xff09;3.3 面试题-说一下HashMap的实现原理&#xff1f;面试题-HashMap的put方法的具体流程hashMap常见属性源码分析 3.3 面试题-说一下HashMap的实现原理&#xff1f; HashMap的数据结…

Mongodb删除操作中字符序对结果的影响

本文还是要从删除操作的语法说起。 db.collection.deleteMany(<filter>,{writeConcern: <document>,collation: <document>,hint: <document|string>} ) 删除语法中&#xff0c;可以指定数据写入策略&#xff0c;字符序和使用的索引字段。 字符序&a…

2024--Django平台开发-Web框架和Django基础(二)

day02 Web框架和Django基础 今日概要&#xff1a; 网络底层引入&#xff0c;到底什么是web框架&#xff1f;常见web框架对比django快速上手&#xff08;创建网站&#xff09;常见操作&#xff1a;虚拟环境、django项目、多app应用、纯净版逐点剖析&#xff1a;路由、视图、模…

mysql的分页查询

我们来看下一段查询&#xff1a; select * from sys_role; 如果我们要进行分页查询&#xff0c;例如每页显示两条数据&#xff0c;我们可以利用 limit 关键字&#xff1a; select * from sys_role limit 0,2; select * from sys_role limit 2,2; 假设我们当前页面为 n&#xf…

机器学习--ROC AUC

参考 机器学习-ROC曲线 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/347470776一文看懂ROC、AUC - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/81202617 在了解之前&#xff0c;我们先来认识一下以下的概念 针对一个二分类问题&#xff0c;将实例分成正类(postive)或…

java基于SSM的游戏商城的设计与实现论文

基于SSM的游戏商城的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于游戏信息的管理和控制&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以…

系统及应用安全

引导语 系统安全及应用是现代信息系统的核心组成部分&#xff0c;它不仅关乎信息安全&#xff0c;更直接影响到企业的运营效率、财务状况乃至品牌信誉。通过不断改进和强化系统的安全性&#xff0c;可以为企业创造一个更加可靠、高效的信息化环境。 一、账号安全的基本措施 …

狮子目标检测数据集VOC格式300张

狮子&#xff0c;作为“丛林之王”&#xff0c;以其威武雄壮的身姿和卓越的狩猎能力闻名于世。 狮子的体型健硕&#xff0c;毛发浓密&#xff0c;通常是金黄色或浅褐色&#xff0c;腹部和腿部的毛发相对较浅。狮子的头部特别大&#xff0c;长有一对威风凛凛的鬃毛&#xff0c;…

玩转Mysql 四(MySQL逻辑架构与数据引擎)

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。 一、MySQL逻辑架构 1、从Oracle收购MySQL后&#xff0c;MySQL逻辑架构受Oracle影响&#xff0c;MySQL8版本中逻辑架构受Oracle的影响逐步完善查询缓存&#xff0c;O…

多线程高级面试题

1. 什么是 ThreadLocal&#xff1f; 参考答案 ThreadLocal 叫做本地线程变量&#xff0c;意思是说&#xff0c;ThreadLocal 中填充的的是当前线程的变量&#xff0c;该变量对其他线程而言是封闭且隔离的&#xff0c;ThreadLocal 为变量在每个线程中创建了一个副本&#xff0c;…

2023年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:数的输入和输出 输入一个整数和双精度浮点数,先将浮点数保留2位小数输出,然后输出整数。 时间限制:1000 内存限制:65536 输入 一行两个数,分别为整数N(不超过整型范围),双精度浮点数F,以一个空格分开。 输出 一行两个数,分…

关于“Python”的核心知识点整理大全65

目录 20.2.19 设置 SECRET_KEY 20.2.20 将项目从 Heroku 删除 注意 20.3 小结 附录 A 安装Python A.1.1 确定已安装的版本 A.1.2 在 Linux 系统中安装 Python 3 A.2 在 OS X 系统中安装 Python A.2.1 确定已安装的版本 A.2.2 使用 Homebrew 来安装 Python 3 注意 …

[技术杂谈]使用VLC将视频转成一个可循环rtsp流

通过vlc播放器&#xff0c;将一个视频转成rtsp流&#xff0c;搭建一个rtsp服务器。rtsp客户端可访问这个视频的rtsp流。 1. 打开vlc播放器&#xff0c;使用的版本如下 2. 菜单&#xff1a;媒体 ---> 流 3. 添加视频文件&#xff0c;点击添加一个mp4 文件 4. 选择串流&…