leetcode热题HOT42. 接雨水

一、问题描述:

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

二、解题思路:

思路1:通过动态规划的预处理方式,分别计算每个柱子左右两侧的最大高度,然后通过遍历计算每个柱子的位置能够存储的水量,最终求得总的积水量。

  • 代码示例:
public int trap(int[] height) {int length = height.length;if (length <= 2) return 0;int[] maxLeft = new int[length];int[] maxRight = new int[length];// 记录每个柱子左边柱子最大高度maxLeft[0] = height[0];for (int i = 1; i< length; i++) maxLeft[i] = Math.max(height[i], maxLeft[i-1]);// 记录每个柱子右边柱子最大高度maxRight[length - 1] = height[length - 1];for(int i = length - 2; i >= 0; i--) maxRight[i] = Math.max(height[i], maxRight[i+1]);// 求和int sum = 0;for (int i = 0; i < length; i++) {int count = Math.min(maxLeft[i], maxRight[i]) - height[i];if (count > 0) sum += count;}return sum;}
  • 时间复杂度为 O(n),空间复杂度为 O(n),

思路2:用单调栈计算能接的雨水总量。

找到高-低-高形状的凹槽。
通过维护一个单调栈,单调栈存储的是下标,满足从栈底到栈顶的下标对应的数组 height 中的元素递减。
遍历数组,只要当前遍历的元素 height[i] 大于栈顶元素 height[top],且栈中至少包含两个元素,就可以形成一个“凹槽”,height[i] 是右边界,top下面的元素是左边界 height[left] 。
凹槽的储水量 curheight = Math.min(height[left], height[i]) - height[top];

  • 代码示例:
public int trap(int[] height) {int result = 0;  // 存储最终的接水量Deque<Integer> stack = new LinkedList<Integer>();  // 单调栈,存储数组索引int n = height.length;  // 数组长度for(int i = 0; i < n; ++i) {// 当栈非空且当前柱子高度大于栈顶柱子高度时,可以接雨水while(!stack.isEmpty() && height[i] > height[stack.peek()]) {int top = stack.pop();  // 弹出栈顶元素,表示当前可以接水的高度if(stack.isEmpty()) break;int left = stack.peek();  // 左边界,当前弹出元素的左边界int curwidth = i - left - 1;  // 当前可以接水的宽度// 当前可以接水的高度,即左右边界的最小高度减去当前弹出元素的高度int curheight = Math.min(height[left], height[i]) - height[top];// 累加当前可以接水的体积//System.out.println(i +" " + left + " " + top + " " + curwidth * curheight);result += curwidth * curheight;}stack.push(i);  // 将当前柱子索引压入栈中}  return result;  // 返回最终的接水量}    
  • 时间复杂度为 O(n),空间复杂度也为 O(n)

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络 0319

OSPF协议&#xff1a;开放式最短路径优先 协议 基于代价的路由协议 适合与大型的网络 DR 指定路由器 BDR 备用指定路由器 OSPF的组播地址 224.0.0.5 224.0.0.6 RIP组播地址&#xff1a;224.0.0.9 OSPF数据包 过程&#xff1a;先各个发送hello包认识&#xff0c;成为邻居…

深圳航空顶象验证码逆向,和百度验证码训练思路

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi a…

CC2530寄存器编程学习笔记_点灯

下面是我的CC2530的学习笔记之点灯部分。 第一步&#xff1a;分析原理图 找到需要对应操作的硬件 图 1 通过这个图1我们可以找到LED1和LED2连接的引脚&#xff0c;分别是P1_0和P1_1。 第二步 分析原理图 图 2 通过图2 确认P1_0和P1_1引脚连接到LED&#xff0c;并且这些引…

51单片机———LED点阵屏显示图形动画

单片机上的一小块屏幕就是LED点阵屏&#xff0c;与数码管一样&#xff0c;内部由LED灯组成&#xff0c;只是点阵屏使用的LED灯更多&#xff0c;LED灯呈矩形分布而非“8”字形&#xff1b;并且点阵屏和数码管一样&#xff0c;有两种接法共阳极和共阳极&#xff1b; 16*16LED点阵…

springboot集成tika解析word,pdf,xls文件文本内容

介绍 Apache Tika 是一个开源的内容分析工具包&#xff0c;用于从各种文档格式中提取文本和元数据。它支持多种文档类型&#xff0c;包括但不限于文本文件、HTML、PDF、Microsoft Office 文档、图像文件等。Tika 的主要功能包括内容检测、文本提取和元数据提取。 官网 https…

vite+vue3整合less教程

1、安装依赖 pnpm install -D less less-loader2、定义全局css变量文件 src/assets/css/global.less :root {--public_background_font_Color: red;--publicHouver_background_Color: #fff;--header_background_Color: #fff;--menu_background: #fff; }3、引入less src/main.…

【postgresql】版本学习

PostgreSQL 17 Beta 2 发布于2024-06-27。 PostgreSQL 17 Beta 2功能和变更功能的完整列表&#xff1a;PostgreSQL: Documentation: 17: E.1. Release 17 ​ 支持的版本&#xff1a; 16 ( 当前版本) / 15 / 14 / 13 / 12 ​ 不支持的版本&#xff1a; 11 / 10 / 9.6 / 9.5 /…

WEB04MyBatis

Mybatis mybatis查询 准备 准备工作 在目前的数据库中添加一张数据表emp 将资料中提供的day04-01-mybatis导入的目前的工程中 修改配置文件中的数据库的账户和密码 观察实体类中的属性和数据表中的字段的对应关系 查询结果封装 查询所有 SQL语句 select * from emp; …

深度解析Ubuntu版本升级:LTS版本升级指南

深度解析Ubuntu版本升级&#xff1a;Ubuntu版本生命周期及LTS版本升级指南 Ubuntu是全球最受欢迎的Linux发行版之一&#xff0c;其版本升级与维护策略直接影响了无数用户的开发和生产环境。Canonical公司为Ubuntu制定了明确的生命周期和发布节奏&#xff0c;使得社区、企业和开…

【MySQL04】【 redo 日志】

文章目录 一、前言二、redo 日志1. redo 日志格式2. Mini-Transaction2.1 以组的形式写入 redo 日志2.2 Mini-Transaction &#xff08;MTR&#xff09;概念 3. redo 日志写入过程3.1 redo 日志缓冲区3.3 redo 日志写入 log buffer 4. redo 日志文件4.1 redo 日志刷盘机制4.2 r…

2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码

经过不懈的努力&#xff0c; 2024年江苏省研究生数学建模竞赛B题人造革性能优化设计研究论文和代码已完成&#xff0c;代码为C题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模…

HCIA综合实验

学习新思想&#xff0c;争做新青年。今天学习的是HCIA综合实验&#xff01; 实验拓扑 实验需求 总部&#xff1a; 1、除了SW8 SW9是三层交换机&#xff0c;其他交换机均为2层交换机。 2、GW为总部的出口设备&#xff0c;使用单臂路由技术&#xff0c;VLAN10,20,100的网关都在GW…

Positron初尝试,新一代数据科学IDE(R+Python+...)

Introduction Positron&#xff08;正电子&#xff09;&#xff0c;是由 RStudio 母公司&#xff08;改名叫 Posit&#xff09;构建的下一代数据科学 IDE&#xff0c;一个可用于编写代码和探索数据的可扩展的多语言工具&#xff0c;并提供可重复创作和发布的熟悉环境。 主页&…

基于SpringBoot的校园台球厅人员与设备管理系统

本系统是要设计一个校园台球厅人员与设备管理系统&#xff0c;这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主要功能包括首页、个人中心、用户管理、会员账号管理、会员充值管理、球桌信息管理、会员预约管理、普通预约管理、留言…

中英双语介绍英国伦敦(London)

中文版 伦敦简介 伦敦&#xff08;London&#xff09;是英国的首都&#xff0c;也是全球最重要的金融、文化、艺术和交通中心之一。作为一座历史悠久的城市&#xff0c;伦敦融合了现代化的城市生活与丰富的历史遗产。以下是对伦敦的详细介绍&#xff0c;包括其经济状况、高等…

Pandas 入门 15 题

Pandas 入门 15 题 1. 相关知识点1.1 修改DataFrame列名1.2 获取行列数1.3 显示前n行1.4 条件数据选取值1.5 创建新列1.6 删去重复的行1.7 删除空值的数据1.9 修改列名1.10 修改数据类型1.11 填充缺失值1.12 数据上下合并1.13 pivot_table透视表的使用1.14 melt透视表的使用1.1…

【学术会议征稿】第四届先进算法与神经网络国际学术会议(AANN 2024)

第四届先进算法与神经网络国际学术会议&#xff08;AANN 2024&#xff09; 2024 4th International Conference on Advanced Algorithms and Neural Networks 第四届先进算法与神经网络国际学术会议&#xff08;AANN 2024&#xff09;由中国石油大学&#xff08;华东&#x…

解决使用PPIO欧派云服务器时无法使用sftp的问题

首先在对外TCP端口中选择22端口&#xff1a; 在连接-端口映射中可以看到&#xff1a; 使用ssh连接云服务器&#xff0c;更新包列表并安装OpenSSH服务器&#xff1a; apt-get update apt-get install-y openssh-server 创建 SSH 运行目录&#xff1a; mkdir /var/run/sshd 设…

Xilinx原语

1. 原语介绍 原语是 Xilinx 器件底层硬件中的功能模块&#xff0c;它使用专用的资源来实现一系列的功能。相比于 IP 核&#xff0c;原语的调用方法更简单&#xff0c;但是一般只用于实现一些简单的功能。本章主要用到了 BUFG、 BUFIO、 IDDR、 ODDR、IDELAYE2 和 IDELAYCTRL。…

【算法 - 哈希表】两数之和

这里写自定义目录标题 两数之和题目解析思路解法一 &#xff1a;暴力枚举 依次遍历解法二 &#xff1a;使用哈希表来做优化 核心逻辑为什么之前的暴力枚举策略不太好用了&#xff1f;所以&#xff0c;这就是 这道题选择 固定一个数&#xff0c;再与其前面的数逐一对比完后&…