编程题—leetcode42:接雨水

Leetcode 42:JavaScript解力扣接雨水算法详细到每一行注释 一 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 一眼看到这题,要左右左右对比计算好烦,于是立刻想到一层一层计算的方法,但是使用递归的话会爆栈啊??不管了————谁叫我像风一样自由~ 就像你的温柔 ~ ... 阅读详情

题目链接

题目描述
给定 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/trapping-rain-water
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目分析
1、我们可以按列进行分析,用一个循环来循环每一列
2、循环到第i列的时候,左边有一个最大值max_left和右边右边有一个最大值max_right,我们可以发现,只有当height[i]都小于上面的这两个值的时候才会有雨水积累
3、写出代码,可以发现max_left我们可以在遍历height的时候就可以随手记录,但max_right却需要不断的循环
//代码1
class Solution {
    public int trap(int[] height) {
    	int res=0;
    	int max_left=0;
    	int max_right=0;
    	for(int  i=0;i<height.length;i++) {
    		max_right=0;
    		for(int j=height.length-1;j>i;j--) {
    			if (height[j]>=max_right) {
    				max_right=height[j];
    			}
    		}
    		if ((max_left>height[i])&&(max_right>height[i])){
    			res+=Math.min(max_left, max_right)-height[i];
    		}
    		if(height[i]>max_left) max_left=height[i];
    	}
    	return res;
    }
}
由于上面的max_right需要我们每次循环进行判断,所以我们在想能不能max_right和max_left一样,仅仅遍历一遍就可以确定它的值
1、在右边高的时候从左往右遍历
2、在左边高的时候从右往左遍历
//代码2:双指针法
class Solution {
    public int trap(int[] height) {
    	int res=0;
    	int left=1;
    	int right=height.length-2;
    	int max_left=0;
    	int max_right=0;
    	while(left<=right) {
    		if (height[left-1]<height[right+1]) {
    			//从左往右算
    			max_left=Math.max(max_left, height[left-1]);
    			int min=max_left;
    			if(height[left]<min) {
    				res+=max_left-height[left];
    			}
    			left++;
    		}else {
    			//从右往左更
    			max_right=Math.max(max_right, height[right+1]);
    			int min=max_right;
    			if(height[right]<min) {
    				res+=max_right-height[right];
    			}
    			right--;
    		}
    	}
    	return res;
    }
}
LeetCode 42.接雨水 给定一个包含非负整数的数组height,每个元素表示一个柱子的高度。每个柱子宽度为 1,计算按此排列的柱子,下雨之后能接多少雨水。i。 阅读详情

相关推荐

LeetCode——–接雨水python

题目不重述了。 小菜一枚,思路还是比较欠缺,按照leetcode题解的精选,用python写了一下。加深理解吧。 按行接雨水: 思路:首先寻找数组的最大值,即最多一共有几行。然后分别求每一行的雨水量。 从第一行开始,第一种情况是遇到比第一行低的块,可以存到一方水;第二种情况是遇到和第一行一样高或者比第一行要高的块,重新开始计算雨水量。 直到最高行,雨水量计算完毕。思路比较清晰,可以看力扣官网题解精选有图。 python代码: class Solution: def trap(self, height: List[int]) -> int: heightest=max

Leetcode经典题13--接雨水

接雨水

2301_81453175的博客 1116

工业级越界行为识别数据集:YOLOv8/v9直接训练的围栏异常检测资源

越界行为识别是智能安防与工业安全中的基础视觉任务,其核心在于对人员、车辆等目标跨越物理边界(如围栏、警戒线、作业禁区)的精准检测与分割。该技术依赖于高质量实例分割标注、归一化坐标格式及场景鲁棒性设计,具备低延迟、高召回、强泛化等工程价值,广泛应用于智慧工地电子围栏、化工厂禁区告警、物流园区越界监控及变电站安全巡检等真实工业场景。本数据集以YOLOv8/v9为基准构建,提供万张实拍+合成图像、像素级Segmentation标注、分层划分与完备元数据,开箱即用,直击工业落地中数据清洗、格式转换与标注不一致等关键

weixin_30080745的博客 316

python-leetcode 7.接雨水

从动态规划方法中注意到只要left_max_arr[i]>right_max_arr[i],积水的高度将由right_max_arr决定,同理,如果right_max_arr[i]>left_max_arr[i],积水的高度将由left_max_arr决定。对于下标i,下雨后水能到达的最大高度等于下标i两边的最大高度的最小值,下标i处能接的雨水量等于下标i处的水能到达的最大高度减去height[i]。从height[0]到当前位置寻找最大值left_max=max[height[j],left_max)。

qq_51906990的博客 870

Goldwasser-Micali 公钥加密系统

1、二次剩余问题 对于整数n ,定义Zn∗={a∈Zn,gcd(a,n)=1}Z^*_n=\{ a∈Z_n,gcd(a,n) =1\}Zn∗​={a∈Zn​,gcd(a,n)=1} 。当存在d∈Znd \in Z_nd∈Zn​ ,使得 d2≡a mod nd^2 \equiv a \, mod \,nd2≡amodn ,称 a 为模 n 的二次剩余;否则称 a 为模 n的二次非剩余。判断 a 是否为模 n 的二次剩余的问题称为模n 的二次剩余问题。 \rule[-10pt]{14.3cm}{0.05em}

不染心的博客 4312

样本不均衡时AUC反而下降?用imbalanced-learn库实战解决分类陷阱

本文探讨了样本不均衡时AUC指标下降的现象,并通过imbalanced-learn库实战演示了如何解决这一分类陷阱。文章详细分析了不同采样技术(如SMOTE、ADASYN)对模型性能的影响,并提供了XGBoost和逻辑回归模型的优化建议,帮助数据科学家在实际项目中做出更明智的决策。

weixin_29174013的博客 343

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

LSTM模型股价波动率预测(含Python代码)

源代码文件可在gzh’finance褪黑素'回复【24012203】获取。

celiaweiwei的博客 3774

Day4——LeetCode42.接雨水(三种方法)

本文主要讲解了LeetCode42接雨水的三种算法,分别为动态规划、双指针和整体法。

m0_73776993的博客 931

手把手教你用PlantVillage数据集搭建农作物病害识别模型(Python实战)

本文详细介绍了如何使用PlantVillage数据集和Python构建农作物病害识别模型。从环境准备、数据获取到模型构建、训练与评估,手把手教你实现一个实用的农业AI应用。特别针对PlantVillage数据集的特点,提供了处理类别不平衡、图像预处理和模型优化的实战技巧,帮助开发者快速掌握农作物病害识别技术。

weixin_29184371的博客 479

置顶必读(2) |《滚雪球学数学建模》专栏目录 & 历年国赛/美赛真题库 & 真题解析(持续更新中)

本专栏《滚雪球学数学建模》采用“从零开始、逐步滚雪球”的学习路径,把数学建模的基础理论、方法工具与大量实战真题(尤其是国赛题,涵盖2025-1992所有真题)有机融合,形成一套系统化训练路线。非常适合零基础入门、希望提升模型与工程化能力的本科/研究生,以及备战全国大学生数学建模竞赛(国赛/省赛)的同学。加油,我们一起把建模能力打造成可迁移的核心竞争力!

**My Coding Family** 26万+

【刷题笔记】接雨水||暴力通过||符合思维方式

那么我们能做的就是从左到右,依次找到越来越高的值;保存其索引,从右到左,依次找到越来越高的值,保存其索引。然后计算这些索引之间的最大盛水面积,减去之间的柱子的面积,就是最后的接雨水的结果。

qq_42898299的博客 795

PCL 直通滤波

内容抄自优快云点云侠:[【2024最新版】PCL点云处理算法汇总(C++长期更新版)](https://blog.youkuaiyun.com/qq_36686437/article/details/114160640)。质量无忧,永久免费,可放心复制粘贴。

m0_51204289的博客 903

【LeetCode力扣】42.接雨水(困难)

一个用木板围成的桶能装多少水取决于最短的那块木板,同理,这道题我们可以把它看做成是由若干块木板组成的一个桶,只是它们是以并排的方式组成的,这里我用left和right两个指针分别指向最左和最右的两块木板,用变量 sum 来记录总的装水量以及两个变量 leftMax和rightMax来记录左边最高的木板值和右边最高的木板值

m0_65277261的博客 1213

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

力扣第42题:接雨水——单调栈

LeetCode第42题 接雨水 单调栈

qq_43903506的博客 3994

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

力扣第42题 接雨水

记录一下刷题历程 力扣第42题 接雨水。

buaichifanqie的博客 1527

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

力扣题解系列:42:接雨水

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

qq_38813052的博客 2179

力扣 42 接雨水

力扣 42 接雨水

chools、一个破敲代码的,感谢收看。 1011

力扣42.接雨水

接雨水,这道题我在大学的时候就听说这道题是力扣的难题,但是一直没有做过。这几天在网上偶然看到关于这道题的文章,于是去学了学这两题的解题思路,故写下这篇博客记录记录。力扣42. 接雨水。

沉迷写代码的程序猿的博客 1089

LeetCode42. 接雨水

LeetCode42. 接雨水

Love Peace 786

LeetCode 图解 | 42. 接雨水

点击关注上方“图解面试算法”,设为“置顶或星标”,一起刷 LeetCode。作者:ioc今天的题目来源于 LeetCode 中第 42 题:接雨水,hard 级别,目前通过率 50.8%...

程序员吴师兄的博客 767

Leetcode42. 接雨水

Leetcode42. 接雨水

ProgramNovice的博客 523

力扣(leetcode) 42. 接雨水 (带你逐步思考)

难度:hard给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。主要需要实现快速对leftmax和rightmax的求解,这个十分简单,从左到右,从右到左各一次遍历就可以求出。将结果存放到数组里后续使用即可降低时间复杂度。这里由于需要保存rightmax,消耗了O(n)的内存,有没有更节省空间的方法?

龙卡的博客 888

力扣:42. 接雨水

在法1中为了得到两边的最高高度,使用了双指针来遍历,每到一个柱子都向两边遍历一遍,这其实是有重复计算的。我们把每一个位置的左边最高高度记录在一个数组上(maxLeft),右边最高高度记录在一个数组上(maxRight)。这样就避免了重复计算,这就用到了动态规划。求每一列的雨水然后将它们相加,可以看出每一列雨水的高度,取决于该列 左侧最高的柱子和右侧最高的柱子中 更矮的那个柱子的高度。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。...

qq_56762247的博客 1609

LeetCode——42. 接雨水

开篇废话 听同学说起,他去字节跳动面试实习的时候,面试官直接给他出了一道Hard接雨水的题。本来吃过晚饭6点左右比较懒散,想干别的之前先做一道算法题,正好也琢磨琢磨这道接雨水的题。结果当我把这道题全部的方法都实现一遍做完的时候发现已经10点多了。下面直接贴上题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,...

NicolasCookie的博客 504
上一篇: 编程题—leetcode54:二叉搜索树的第k大节点
下一篇: 编程题—剑指offer: 二叉树中和为某一值的路径
code_AC
博客等级 码龄12年 255粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值