leetcode:42. 接雨水(秒变简单题)

题目要求

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

        要求给出一列柱子,求该柱子能盛放多少雨水

解题思路:

        这些柱子围城了一个“盆地”,雨水会积攒在低洼处,我们要计算“盆地”能装多少水

        关键点:每个位置能接的雨水量,取决于它左右两边最高的柱子中较矮的那个(木桶效应)。

解题步骤分解

  1. 找到最高的柱子:
  • 这个柱子把整个区域分成左右两部分
    • 左边的水位由左边最高的柱子决定(从左到右遍历到的)
    • 右边的水位由右边最高的柱子决定(从右到左遍历到的)
  1. 计算左侧雨水:
    • 从左往右扫描,记录遇到的最高柱子
    • 当前水位就是这个最高柱子的高度
    • 每个柱子的积水量 = 当前水位 - 柱子高度
  1. 计算右侧雨水:
  • 从右往左扫描,记录遇到的最高柱子
    • 当前水位就是这个最高柱子的高度
    • 每个柱子的积水量 = 当前水位 - 柱子高度
  1. 汇总结果:
  • 把左边和右边的积水量加起来就是总雨水量

 

其实可以辅助图理解

关键就是我们只需要关注左/右侧最高柱子,因为它是木桶效应中的短板,决定能装多少水

假设这个是最高柱子的左侧,现在我们从1-6开始遍历

        1:高度为1,更新左边最高的柱子高度为1,并且计算累计雨水+=(最高柱子-当前柱子高度=0)

        2:高度为0,累计雨水+=(最高柱子-当前柱子高度=1)

        3:高度为2,更新左边最高柱子高度为1,累计雨水+0

        4:高度为1,累计雨水+=(最高柱子2-当前柱子高度1=1)

。。。。

右边也是同理的

java代码实现

class Solution {public int trap(int[] height) {// 1. 首先找到最高的柱子int maxHeight = 0;      // 记录最高柱子的高度int maxPos = -1;        // 记录最高柱子的位置int len = height.length; // 数组长度// 遍历数组,找出最高的柱子及其位置for(int i = 0; i < len; i++) {if(height[i] > maxHeight) {maxHeight = height[i]; // 更新最高高度maxPos = i;           // 更新最高柱子的位置}}// 如果所有柱子高度都为0,接不到雨水if(maxHeight == 0) {return 0;}int sum = 0;            // 总雨水量int waterHeight = 0;    // 当前水位高度// 2. 计算最高柱子左侧的雨水量// 从左往右遍历,水位由左侧最高柱子决定for(int i = 0; i < maxPos; i++) {// 如果当前柱子比之前的水位高,更新水位if(height[i] > waterHeight) {waterHeight = height[i];}// 当前柱子上方的雨水量 = 当前水位 - 当前柱子高度sum += waterHeight - height[i];}// 3. 计算最高柱子右侧的雨水量waterHeight = 0; // 重置水位// 从右往左遍历,水位由右侧最高柱子决定for(int i = len - 1; i > maxPos; i--) {// 如果当前柱子比之前的水位高,更新水位if(height[i] > waterHeight) {waterHeight = height[i];}// 当前柱子上方的雨水量 = 当前水位 - 当前柱子高度sum += waterHeight - height[i];}return sum; // 返回总雨水量}
}

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

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

相关文章

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…

245. 2019年蓝桥杯国赛 - 数正方形(困难)- 递推

245. 数正方形&#xff08;困难&#xff09; 2019年蓝桥杯国赛 - 数正方形&#xff08;困难&#xff09; 标签&#xff1a;2019 国赛 递推 题目描述 在一个 N N N N N N 的点阵上&#xff0c;取其中 4 个点恰好组成一个正方形的 4 个顶点&#xff0c;一共有多少种不同的取…

python Day46 学习(日志Day15复习)

Q. 关于"range()" 手写笔记复习 今日学习到这里&#xff0c;明日继续加油&#xff01;&#xff01;&#xff01;浙大疏锦行

深度解析 Linux 内核参数 net.ipv4.tcp_rmem:优化网络性能的关键

文章目录 引言一、认识 net.ipv4.tcp_rmem1. 最小值&#xff08;min&#xff09;2. 默认值&#xff08;default&#xff09;3. 最大值&#xff08;max&#xff09; 二、net.ipv4.tcp_rmem 的工作原理三、net.ipv4.tcp_rmem 的实际应用场景1. 高并发 Web 服务器2. 文件传输服务3…

商品中心—1.B端建品和C端缓存的技术文档一

大纲 1.商品中心的专业术语 2.商品中心的基本业务系统 3.商品中心整体架构设计以及运行流程 4.商品B端—商品编码生成逻辑 5.商品B端—商品核心数据模型 6.商品B端—转换建品请求数据为商品模型数据 7.商品B端—商品建品时商品编号补全与审核配置 8.商品B端—商品审核前…

Xcode 16.2 版本 pod init 报错

Xcode 版本升级到 16.2 后&#xff0c;项目执行 pod init 报错&#xff1b; ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchron…

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…

LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上

题目&#xff1a;1667. 修复表中的名字 题解&#xff1a; select user_id, concat(upper(left(name,1)),lower(right(name,length(name)-1))) name from Users order by user_id题目&#xff1a;1527. 患某种疾病的患者 题解&#xff1a; select * from Patients where con…

随机算法一文深度全解

随机算法一文深度全解 一、随机算法基础1.1 定义与核心特性1.2 算法优势与局限 二、随机算法经典案例2.1 随机化快速排序原理推导问题分析与策略代码实现&#xff08;Python、Java、C&#xff09; 2.2 蒙特卡罗方法计算 π 值原理推导问题分析与策略代码实现&#xff08;Python…

[论文阅读] 人工智能+软件工程 | 结对编程中的知识转移新图景

当AI成为编程搭档&#xff1a;结对编程中的知识转移新图景 论文信息 论文标题&#xff1a;From Developer Pairs to AI Copilots: A Comparative Study on Knowledge Transfer&#xff08;从开发者结对到AI副驾驶&#xff1a;知识转移的对比研究&#xff09; 作者及机构&#…

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…

Windows开机自动启动中间件

WinSW&#xff08;Windows Service Wrapper 是一个开源的 Windows 服务包装器&#xff0c;它可以帮助你将应用程序打包成系统服务&#xff0c;并实现开机自启动的功能。 一、下载 WinSW 下载 WinSW-x64.exe v2.12.0 (⬇️ 更多版本下载) 和 sample-minimal.xml 二、配置 WinS…