题目

给定 n 个非负整数表示每个宽度为 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 个单位的雨水(蓝色部分表示雨水)。

在这里插入图片描述

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

链接:[https://leetcode.cn/problems/3sum/description/?envType=study-plan-v2&envId=top-100-liked)

思路

思路一(超时)

暴力:对于每个位置,找到左右最高的高度,计算当前位置的雨水,加和。O(N²)会超时

思路二

在暴力的基础上进行优化,先遍历一遍提前知道每个位置左右最高高度,然后对于每个位置,计算当前位置的雨水,加和。O(N)

class Solution {public int trap(int[] height) {int sum = 0;int[] max_left = new int[height.length];int[] max_right = new int[height.length];// 提前知道每个位置左右最高高度for (int i = 1; i < height.length - 1; i++) {max_left[i] = Math.max(max_left[i - 1], height[i - 1]);}for (int i = height.length - 2; i >= 0; i--) {max_right[i] = Math.max(max_right[i + 1], height[i + 1]);}// 计算当前位置盛水量for (int i = 1; i < height.length - 1; i++) {int min = Math.min(max_left[i], max_right[i]);if (min > height[i]) {sum = sum + (min - height[i]);}}return sum;}
}

思路三

在思路二的基础上继续优化,在遍历的过程中就知道左右最高高度,从而节省空间复杂度。
一个位置能盛放的雨水量,是由当前位置和**左右最高高度中较小的高度决定的。**因此,双指针从头尾进行遍历,每次移动较矮的。在移动的过程中记录水量。

class Solution {public int trap(int[] height) {int leftMax = height[0];int rightMax = height[height.length-1];int left = 0;int right = height.length-1;int sum = 0;while (left < right) {if (height[left] < height[right]) {leftMax = Math.max(leftMax, height[left]);sum = sum + leftMax - height[left];left++;} else {rightMax = Math.max(rightMax, height[right]);sum = sum + rightMax - height[right];right--;}}return sum;}
}

思路四(超时)

首先找到最高的高度max,在实际下雨的过程中,首先高度为1的地方都是水,然后是高度为2的地方都是水,依次到高度为max的地方。
那么对于当前的高度i,找到最左和最右高度为i的位置left和right。那么在这中间的这段区域都可能有水,比较每个位置的高度和i的关系即可,满足则总水量+1。

class Solution {public int trap(int[] height) {int max = 0;for (int i = 0; i < height.length; i++) {max = Math.max(height[i], max);}int result = 0;for (int i = 1; i <= max; i++) {int left = 0;int right = height.length -1;while (left < right) {if (height[left] < i) {left++;} else if (height[right] < i) {right--;} else {for (int j = left+1; j < right; j++) {if (height[j] < i) {result++;}}break;}}}return result;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机拼接板(开发板积木)

一、前言 1.1 背景 读书那会儿&#xff08;2013年左右&#xff09;网上接了很多51单片机的设计。 当时有个痛点: 每张板子都是定制的&#xff0c;画板子&#xff0c;打样&#xff0c;写代码需要花费很多时间。 希望有一张板子&#xff0c;能够实现绝大多数单片机的功能&#xf…

使用segment-anything将目标检测label转换为语义分割label

使用segment-anything将目标检测label转换为语义分割label一、segment-anything简介二、segment-anything安装2.1安装方法2.2预训练模型下载三、将目标检测label转换为语义分割label3.1示例代码3.2代码说明一、segment-anything简介 segment-anything是facebookresearch团队开…

【unitrix数间混合计算】3.3 无符号整数标记trait(bin_unsigned.rs)

一、源码 这段代码是用 Rust 语言实现的一个类型级无符号二进制整数系统&#xff0c;通过类型系统在编译时表示和操作二进制数字。这是一种典型的"类型级编程"&#xff08;type-level programming&#xff09;技术。 use crate::number::{U0, Bin, Bit, BinInt};/// …

Python基本语法总结

1.类&#xff08;Class&#xff09;在Python中类&#xff08;Class&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心概念。1.1.类的基本定义最简单的类class Cat:"""这是一个最简单的类"""pass #创建实例 obj Cat()包含方法的类cl…

数据结构05(Java)-- ( 归并排序实质,归并排序扩展问题:小和问题)

前言 本文为本小白&#x1f92f;学习数据结构的笔记&#xff0c;将以算法题为导向&#xff0c;向大家更清晰的介绍数据结构相关知识&#xff08;算法题都出自&#x1f64c;B站马士兵教育——左老师的课程&#xff0c;讲的很好&#xff0c;对于想入门刷题的人很有帮助&#x1f4…

税务专业人员能力构建与发展路径指南

CDA数据分析师证书含金量高&#xff0c;适应了未来数字化经济和AI发展趋势&#xff0c;难度不高&#xff0c;行业认可度高&#xff0c;对于找工作很有帮助。一、税务专业人员的核心能力框架能力维度关键技能要素专业工具与方法论实践输出成果税务法规应用税种政策解读、法规更新…

Linux中rsync使用与inotify实时同步配置指南

Linux中rsync使用与inotify实时同步配置指南 一、rsync 简介 rsync&#xff08;Remote Sync&#xff09;是 Linux 系统下的一款高效数据镜像和备份工具&#xff0c;用于在本地或远程同步文件和目录。 支持本地复制、基于 SSH 的远程同步&#xff0c;以及使用自有 rsync 协议的同…

Unicode 字符串转 UTF-8 编码算法剖析

&#x1f4ca; Unicode 字符串转 UTF-8 编码算法剖析 ——从 C# char 到 C wchar_t 的编码转换原理 引用&#xff1a;UTF-8 编解码可视化分析 &#x1f50d; 1. 算法功能概述 该函数将 Unicode 字符串&#xff08;C# string&#xff09;转换为 UTF-8 编码的字节数组&#xf…

php的安全性到底怎么样

PHP作为一种流行的服务器端脚本语言&#xff0c;被广泛应用于Web开发。然而&#xff0c;由于PHP是一种较为灵活的语言&#xff0c;其安全性议题一直备受争议。在这篇文章中&#xff0c;我将从多个方面来讨论PHP的安全性&#xff0c;包括常见的安全漏洞、防范措施以及最佳实践。…

mapbox高阶,结合threejs(threebox)添加建筑glb模型,添加阴影效果,设置阴影颜色和透明度

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言 1.1 ☘️mapboxgl.Map 地图对象 1.2 ☘️mapboxgl.Map style属性 1.3 ☘️threebox loadObj加载模型 二、🍀…

SSM从入门到实战:1.6 Spring数据访问与JDBC模板

&#x1f44b; 大家好&#xff0c;我是 阿问学长&#xff01;专注于分享优质开源项目解析、毕业设计项目指导支持、幼小初高的教辅资料推荐等&#xff0c;欢迎关注交流&#xff01;&#x1f680; 06-Spring数据访问与JDBC模板 &#x1f4d6; 本文概述 本文是SSM框架系列Spri…

下一代IT服务管理:ITIL5会是什么样?

ITIL4发布到现在也就5年多时间&#xff0c;按照以往的更新节奏&#xff0c;ITIL5最早也得2027年之后。但现在IT发展的速度&#xff0c;跟以前完全不是一个量级。AI都快把我们的饭碗抢了&#xff08;开个玩笑&#xff09;&#xff0c;ITIL要是还按部就班&#xff0c;估计真要被时…

最新研究进展:2023-2025年神经机器翻译突破性成果

文章目录 一、模型架构创新 1.1 混合架构的崛起 1.2 多模态翻译的突破 1.3 大语言模型与NMT的深度融合(2023-2024) 1.4 非自回归翻译(NAT)的效率革命(2024) 二、数据与训练策略优化 2.1 低资源语言翻译的飞跃 2.2 动态数据增强技术 三、效率与部署 3.1 模型压缩与加速 3.…

OpenTelemetry WebSocket 监控终极方案:打通最后一公里

概述 OpenTelemetry&#xff0c;以下简称 OTEL&#xff0c;是由 CNCF 托管的“一站式可观测性标准”&#xff0c;把指标、链路、日志三大信号统一为单一 SDK/API&#xff0c;零侵入地采集从浏览器、移动端到后端、容器、云服务的全栈遥测数据&#xff0c;并支持 40 后端一键导…

VS Code 出现的 Web 视图加载错误和服务工作者注册失败问题解决方案

针对 VS Code 或 Cursor &#xff08;vscode系&#xff09;中出现的 Web 视图加载错误和服务工作者注册失败问题&#xff0c;以下是永久性解决方案的完整操作指南&#xff1a;解决方案步骤打开命令面板 使用快捷键 CtrlShiftP&#xff08;Windows/Linux&#xff09;或 CmdShift…

【qml-4】qml与c++交互(类型多例)

背景&#xff1a; 【qml-1】qml与c交互第一次尝试&#xff08;实例注入&#xff09; 【qml-2】尝试一个有模式的qml弹窗 【qml-3】qml与c交互第二次尝试&#xff08;类型注册&#xff09; 【qml-4】qml与c交互&#xff08;类型多例&#xff09; 【qml-5】qml与c交互&#…

图数据库如何构筑 Web3 风控防线 聚焦批量注册与链上盗转 悦数图数据库

随着 Web3 生态的不断演进&#xff0c;链上风险呈现出团伙化、隐蔽化和动态化的趋势&#xff0c;传统的单点风控手段已难以应对复杂多变的攻击模式。尤其在批量注册薅羊毛与链上交易盗转洗钱等高频风险场景中&#xff0c;攻击者往往通过伪造身份、跨链操作、多层嵌套转账等方式…

恒流源电路学习

恒流源的设计原理&#xff1a; 如图所示你可以看到右边的的推到公式得到红点处的电压是一个和左边相关的定值&#xff0c;所以呢右边的电流就是电压除以那个4Ω&#xff0c;所以得到右边的电路的电流大体是一个定值&#xff0c;不管你再加什么东西都可以保持这个电流&#xff…

基于生成对抗网络的模糊图像恢复原理与技术实现

1. 引言图像模糊是数字图像处理中的常见问题&#xff0c;其成因包括相机抖动、物体运动、聚焦不良等。传统方法如维纳滤波、Lucy-Richardson 算法等依赖于模糊核估计和逆滤波&#xff0c;在复杂场景下性能有限。生成对抗网络&#xff08;Generative Adversarial Networks, GAN&…

【Doris 系列】Doris IP 变更修复

FE 恢复 异常日志 查看 fe.out 会有以下报错&#xff0c;此时 fe 进程是无法启动的&#xff0c;操作前注意备份所有 fe 的元数据并停止上游读写动作&#xff01; java.io.IOException: the self host 192.168.31.78 does not equal to the host in ROLE file 192.168.31.81. Yo…