leetcode 42. Trapping Rain Water(接雨水)

【Leetcode】42. 接雨水(Trapping Rain Water) Leetcode - 42 Trapping Rain Water (Hard) 题目描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 Input: [0,1,0,2,1,0,1,3,2,1,2,1] Output: 6 解题思路:双指针 public int trap(int[] height) { int left = ... 阅读详情

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
在这里插入图片描述
给出一个数组代表不同bar的高,问bar之间能聚多少水

思路:
每个bar处雨水的多少=min(左边最高的bar,右边最高的bar)-当前bar的高度,最后对所有bar求和
因为雨水的多少是由左右短板决定的,找出左边最高的bar和右边最高的bar,它们中较小的决定了当前bar处的雨水量,当前bar处可积的雨水量就是左右bar中最小的减去当前bar的高度

本来是在每个bar处都遍历左右,找到左边max和右边max,取较小的减去当前bar的高度,对所有bar求和。但是可以看到有很多重复计算,因为每遍历一个元素都要求一遍左右max,时间复杂度为O(N2)

减少重复计算可以用双指针,从两边开始遍历,因为积水量受短板影响,所以短的那一端指针移动,以保留较长的,
注意判断哪边短其实也就相当于选了左右max中较小的(因为max如果较大,这个指针是不会移动的),也选取了当前bar,
用左右max中较小的减去当前指针所指的bar的长度,
对所有的bar处求和

    public int trap(int[] height) {
        if(height == null || height.length == 0) {
            return 0;
        }
        
        int n = height.length;
        int left = 0;
        int right = n - 1;
        int result = 0;
        int leftMax = 0;
        int rightMax = 0;
        
        while(left < right) {
            if(height[left] < height[right]) {
                leftMax = Math.max(leftMax, height[left]);
                result += leftMax - height[left];
                left ++;
            } else {
                rightMax = Math.max(rightMax, height[right]);
                result += rightMax - height[right];
                right --;
            }
        }
        
        return result;
    }
【LeetCode最详尽解答】42-接雨水 Trapping-Rain-Water 欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!通过可视化图形来解决这个问题会更容易理解和解决。给定输入: ,输出应为 。解释:数组 表示的地形图会有 个单位的雨水被困住。最初,我尝试同时移动左指针和右指针,但在到达右半部分 时遇到了问题。这时,左指针指向值 ,而右指针指向数组的末尾。右边界值小于左边界值,无法形 阅读详情

相关推荐

保姆级教程:用CellOracle 0.10.13从单细胞数据构建基因调控网络(附完整代码)

本文提供了一份详细的CellOracle 0.10.13使用指南,帮助用户从单细胞数据构建基因调控网络。通过Python接口,即使是生物信息学新手也能快速掌握数据准备、KNN插补、GRN计算及可视化等关键步骤。文章包含完整代码和实用技巧,助力单细胞转录组数据分析。

weixin_42563415的博客 720

leetcode接雨水问题

一、leetcode题目: 11.盛最多水的容器(难度=中等) 42.接雨水(难度=困难) 407.接雨水II(难度=困难) 二、解题分析: 11.盛最多水的容器 解决方案:双指针法 设两指针 i , j ,指向的水槽板高度分别为 h[i] , h[j] ,此状态下水槽面积为 S(i,j)。由于可容纳水的高度由两板中的 短板 决定,因此可得如下 面积公式 : S(i,j)=min(h[i],h[j])×(j−i) 在每个状态下,无论长板或短板向中间...

weixin_50666824的博客 8007

STM32F4驱动ADS1220高精度ADC:从SPI配置到数据校准的完整实战指南

本文详细介绍了如何使用STM32F4微控制器驱动ADS1220高精度ADC,涵盖从SPI接口配置、寄存器设置到数据采集与校准的全过程。通过实战代码示例和硬件设计要点,帮助开发者快速构建高精度数据采集系统,适用于工业测量和精密仪器等应用场景。

weixin_26918763的博客 224

leetcode--接雨水(双指针法,动态规划,单调栈)

黑色的是柱子,蓝色的是雨水,我们先来观察一下雨水的分布情况:雨水落在凹槽之间,在一个凹槽的左右都会有两个柱子,两个柱子高度可能相同也可能不同,柱子的高低决定了凹槽的雨水的高度,雨水的高度等于两个柱子较低的高度。

大学在读,感谢关注 4090

EtherCAT应用层协议选型指南:CoE、SoE、EoE、FoE、AoE到底怎么选?看完这篇就懂了

本文深入解析EtherCAT应用层协议(CoE、SoE、EoE、FoE、AoE)的选型策略,从实时性、数据吞吐量和功能完整性三大核心指标出发,提供工业场景下的实战决策框架。通过技术特性对比、混合协议架构设计和常见故障规避指南,帮助工程师优化自动化设备通信性能。

weixin_28718793的博客 486

【异常】解决 Claude Code 及第三方插件提示 “API Error: 404“ 的配置修复指南

在使用 Claude 相关的 CLI 工具(如)或 IDE 插件进行开发辅助时,配置错误的模型参数是导致连接失败的常见原因。本文将针对这一典型报错进行复盘与解决。

奶爸的编程之路,也就一周冷个三天 7745

【数组与排序】接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 class Solution { public...

邓乐来Jacob的博客 572

飞牛 NAS 部署 Hermes Agent 全指南:打造 24 小时在线、自我进化的 AI 智能体!

当大多数人还在把 AI 当聊天机器人使用时,我已经把它部署到了家里的飞牛 NAS 上,让它 24 小时在线工作、记忆我的习惯、自动执行任务,甚至还能不断学习新的技能。今天带你从零搭建这个真正属于自己的 AI Agent。🚀

XiaoqiangClub的博客 1217

Leetcode接雨水系列问题

目前遇到的有以下相似题目,后续会持续更新...... Leetcode11. 盛最多水的容器 Leetcode42. 接雨水 一、Leetcode11题:盛最多水的容器 1.题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i,height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例1: 输入:[1,8,6,2,5,

qq_39144436的博客 3555

【AI智能体】Claude Code +Superpowers 项目实战操作详解

Claude Code +Superpowers 项目实战操作详解

congge 4043

老 Intel Mac mini 装 OpenClaw:低成本常年在线方案

老款Intel Mac mini部署OpenClaw方案摘要 本文详细介绍了如何利用老款Intel Mac mini低成本部署OpenClaw系统。方案推荐2011-2018款Mac mini,建议升级至16GB内存和SSD存储以提升性能。部署步骤包括:1)安装Ubuntu系统;2)配置Docker环境;3)通过docker-compose部署OpenClaw及其依赖组件(PostgreSQL和Redis);4)进行系统级和Docker层面的性能优化;5)设置开机自启动服务。该方案充分利用老款设备剩余价值,

一键难忘的博客 2475

42. 接雨水

42. 接雨水 解题思路 1. 暴力 时间O(N2)O(N^2)O(N2) 空间O(1)O(1)O(1) 审题之后可以发现每个柱子顶部可以储水的高度,当前柱子的左右两侧最大高度的较小者减去当前柱子的高度。 因此我们只需要遍历每个柱子,累加每个柱子可以储水的高度即可。 参考代码1 class Solution { public int trap(int[] height) { if (height == null || height.length == 0) return 0;

org_hjh的博客 1296

【AI智能体】基于OpenCode 搭建Skills环境与项目实战开发详解

基于OpenCode 搭建Skills环境与项目实战开发详解

congge 8898

Leetcode | 42.接雨水 Trapping Rain Water

这种方法是,只要柱子比前面高,就能计算一波,后面柱子更高时,再在此基础上继续计算积水量,这样边界就非常明显了。只有当前高度值比左右柱子最大高度小,才能接到雨水,如果当前柱子高度与左右最大高度柱子其中之一一样高,则跳过,说明当前柱子是后面低洼处的一个边界。只要2个蓝色的小方块中间有空白,就表示此处可以积水,积水量 +1,每一行计算完后,行数 + 1,继续遍历。还是注意一点,如果当前柱子高度同最大高度柱子高度一样,则不进行计算,或增加量为0。将所有的柱子,划分为2维空间里面,蓝色的为柱子,其他彩色为积水量。

RandyOliver's House 355

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LeetCode 42 接雨水 Trapping Rain Water

LeetCode 42 接雨水 Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. 题目:本题输入一个由非负整数组成的数组,表示地面上若干柱子的高度,...

andyL_05的博客 324

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode第42题思悟——接雨水(trapping-rain-water)

LeetCode第42题思悟——接雨水(trapping-rain-water) 文章目录LeetCode第42题思悟——接雨水(trapping-rain-water)知识点预告题目要求示例我的思路优秀解法差异分析知识点小结 知识点预告 指针在数组中移动的技巧; 化整为零的技巧; 题目要求 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 ...

博采众长,自成一派; 478

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Leetcode 42. Trapping Rain Water 接雨水

Leetcode 42. Trapping Rain Water 接雨水 标签: Leetcode 题目地址:https://leetcode-cn.com/problems/trapping-rain-water/ 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2...

CoderWangSon 216

【LeetCode】42. Trapping Rain Water 接雨水 (C++)

作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录题目描述题目大意解题方法暴力求解保存左右最大值单调栈日期 题目地址:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述 Given n non-negative integers repres...

负雪明烛 1582

LeetCode 42. 接雨水(Trapping Rain Water)

题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解题思路:  看...

tan137310853的博客 365

【小白爬Leetcode42】8.5 接雨水 Trapping Rain Water

【小白爬Leetcode42】8.5 接雨水 Trapping Rain Water 题目Discription思路一 栈实现思路二 动态规划 Leetcode 42 hard\color{#FF0000}{hard}hard 点击进入原题链接:接雨水 Trapping Rain Water 题目 Discription Given n non-negative integers representing an elevation map where the width of each bar is

weixin_41604040的博客 956

LeetCode 42. Trapping Rain Water_接雨水

给定n个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。感谢 Marcos贡献此图。 输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6 public int t...

桀客 217

LeetCode(42):接雨水 Trapping Rain Water(Java)

2019.5.12 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) 这道题属于智力题的范畴,和之前一道盛水题极相似:LeetCode(11):盛最多水的容器 Container With Most Water(Java)。得益于这道题的思路,这道题很容易可以手撕出来。 主要思路有几种: 首尾逼近 从两端朝内逼近,每次更新较矮的端点minheight,在每次循环逼近过程中将...

NJU_ChopinXBP的博客 405

leetcode-42. Trapping Rain Water 接雨水

Givennnon-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. The above elevation map is represente...

别说话写代码的博客 278

(Java)leetcode-42 Trapping Rain Water(接雨水)

从暴力到动态规划优化时间,再用双指针优化空间

不思量 344

LeetCode 42. 接雨水 Trapping Rain Water

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 public class ...

Umbrella Corporation 1万+

LeetCode42:接雨水(Trapping Rain Water)

--- title: LeetCode42:接雨水(Trapping Rain Water) date: 2019-9-3 13:58:30 tags: [LeetCode] categories: LeetCode刷题 英文题目: Given n non-negative integers representing an elevation map where the width of ea...

XB_please的博客 306
上一篇: matlab用confusionmat计算SE, SP, F1 score
下一篇: leetcode 48. Rotate Image(旋转图像)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值