Leetcode #42. Trapping Rain Water 雨水收集 解题报告

2026年5月典型AI应用落地 2026年5月AI应用全面进入商用化阶段,呈现三大特征:产业端深度渗透核心业务场景,如法律领域AI合同处理系统完成8500万元项目;消费端实现规模普及,京东618全场景AI化,智能家居产品涌现;基础设施层面运营商推出词元套餐降低使用门槛。政策法规与国际合作同步推进,日本通过首部AI专项法律,中国举办多场产业对接会。AI应用从技术验证转向实效产出,进入精算回报的成熟期。 阅读详情

1 解题思想

原题给定一个X轴上的取值,可以视为一个凸起的墙,高度就是对应的Y值,现在问如果下了一场雨,那么这些凸起的地方一共可以收集到多少的雨水?

那么如何才能收集呢?从图片上可以推出的就是,任意两个凸起的中间,有比两边最矮一边还要更矮的凹陷,就可以收集到雨水了。

所以做法就是,找出这些所有凹陷。
那么根据我的经验总结,从左往右找的方法如下:

1、任何一个位置i的凸起,正好能和位置j(j>i,j的高度也大于等于i的)围成一个独立的容器,注意是独立的,这时候可以单独计算这个容器的接收量,并接下来从j继续找。

2、如果j找不到是不是就没有了呢?不,因为我的1里的假设是i和不小于i高度的围成,但是i也可以和比i更矮的围起来不是么?那么这时候选择比i小的最大的一个位置k为另一个边缘,计算雨水量,然后再从k位置继续寻找

具体的做法,看我的代码注释。。

总之我的思想,就是找到每一个独立的能盛水的地方,且优先考虑左边凸起高度不大于右边的(必须这么考虑,如果只考虑2,那么计算出来的盛水量会小于实际的),这种情况是一个完整的盛水容器。如果没有,我们在考虑情况2 ,找到另一个独立的容器

2 原题

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.

For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!
这里写图片描述

3 AC解

public class Solution {
    /**
     * 核心思想,要能够接住水,那么一定是两个比较高的在一起才能
     * 题目给了指示是两个指针,所以依然一个slower 一个 faster,
     * 我的目标是,独立的找到每一个单独的容器
     * 
     * slower标示左边缘,faster右边缘
     * 
     * 那么在寻找的时候首先肯定是,faster正好是第一个大于slower高度的地方,那么这时候我们就得到一个容器了
     * 
     * 那如果找不到faster,是不是就说没有容器了?
     * 不,我们在找faster时还要同时记录一个停留点,stoppoint,他是小于slower高度里最大的那一个,这个点和slower也能作为一个容器
     * 
     * 在计算完当前容器后,slower移动到faster的位置,faster重新往后进行搜索。。
     * 
     * 
     * 我没有看网上攻略,Hard的题目,不知道还有更好的解决方法么,欢迎交流
     * */
    public int trap(int[] height) {
        int total=0;
        int slower=0,faster=1;
        int n=height.length,i,tmp;
        while(faster<n){
            //在结束前找到
            int stopPoint=faster,max=-1,min;
            while(faster<n && height[faster]<height[slower]){
                if(height[faster]>height[stopPoint])
                    stopPoint=faster;
                faster++;
            }
            //如果没找到,那么把那个特殊的点给faster,他也可以作为边缘
            if(faster>=height.length ){
                faster=stopPoint;
            }
            //计算当前容量
            tmp=0;
            min=Math.min(height[faster],height[slower]);
            for(i=slower+1;i<faster;i++){
                tmp-=height[i];
                tmp+=min;
            }
            total+=tmp;
            slower=faster;
            faster++;
        }
        return total;

    }
}
Oracle19c SYSAUX表空间爆满?手把手教你清理SM/ADVISOR和AUDSYS占用(附完整SQL) 本文详细解析了Oracle19c中SYSAUX表空间爆满的常见原因及解决方案,重点针对SM/ADVISOR和AUDSYS组件的空间占用问题提供了完整的SQL清理脚本。通过诊断查询、空间清理和预防性维护策略,帮助DBA有效管理SYSAUX表空间,确保数据库稳定运行。 阅读详情

相关推荐

深入浅出:大型语言模型(LLM)的全面解读

在当今的数字化时代,人工智能技术已经成为各行各业的核心驱动力之一。而在人工智能的领域中,大型语言模型(LLM)作为一种引人瞩目的技术,正在以其强大的语言理解和生成能力引领着一场革命。本文旨在深入浅出地解读大型语言模型,探讨其背后的原理、技术突破、应用场景以及未来发展趋势。

fudaihb的博客 10万+

LeetCode: 42. Trapping Rain Water

LeetCode: 42. Trapping Rain Water

杨领well的专栏 1764

YOLOv11 改进 - 特征融合 | SSFF+TPE+CPAM 协同,ASF-YOLO 三重模块破解密集小目标分割难题

本文介绍了基于注意力尺度序列融合的ASF - YOLO模型在YOLOv11中的结合应用。ASF - YOLO旨在实现准确快速的细胞实例分割,结合空间和尺度特征,引入SSFF模块增强多尺度信息提取能力,TFE模块融合不同尺度特征图,CPAM整合前两者以关注信息丰富通道和小物体。我们将ASF - YOLO相关模块集成进YOLOv11,替代原有的部分特征融合模块,实现更高效的特征提取与融合。实验证明,YOLOv11 - ASFYOLO在细胞实例分割任务中表现出色,展现了该模型在深度学习中的广泛应用前景。

魔改工程师的博客 1235

Leetcode Problem : Trapping Rainwater

Trapping Rainwater The code is as follows : class Solution { public: int trap(vector<int>& a) { // we calculate on each block head how much water we // can put up. //It will depend on the height of the l...

m0_63361757的博客 188

leetcodetrapping-rain-water

/** * Source : https://oj.leetcode.com/problems/trapping-rain-water/ * * Created by lverpeng on 2017/7/15. * * Given n non-negative integers representing an elevation map where the width of each ...

weixin_34404393的博客 162

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的博客 7967

LeetCode 42.雨水

雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 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 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入: height = [4,2,0,3,2,5] 输出: 9 提示: n == height.length 0 <=

weixin_45771864的博客 1025

Leetcode 407. Trapping Rain Water II 收集雨水2 解题报告

留坑还木有来得及做,还要赶明天的东西,这个Hard应该很费时间,所以保持队形。。这个问题其实之前也有过: Leetcode #42. Trapping Rain Water 雨水收集 解题报告 只不过现在是3-D的了,可以先看看2D了对了,我先留一个别人的代码。。大家参考着看吧2 原题Given an m x n matrix of positive integers representing t

MebiuW的专栏 5823

LeetCode 42. Trapping Rain Water 题解

本题是双指针和动态规划的经典应用问题,主要考察对这两种算法思想的理解和使用。通过使用动态规划或双指针,我们可以高效地计算能接的雨水量。动态规划的核心思想是:对于每个柱子,其能接的雨水量取决于其左侧和右侧的最大高度。双指针的核心思想是:使用两个指针分别指向数组的开始和结束位置,根据左侧和右侧的最大高度来移动指针,计算能接的雨水量。在实际应用中,双指针方法通常更受欢迎,因为它的空间复杂度更低,只需要常数级的额外空间。这种方法不仅适用于接雨水问题,还可以应用于许多其他需要计算两侧最大高度的问题。

cannonjinx的博客 2439

LeetCode42):接雨水 Trapping Rain Water(Java)

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

NJU_ChopinXBP的博客 402

42. Trapping Rain Water

class Solution: def trap(self, height: List[int]) -> int: over = height[:] def find_maximum(a, b, flag): m_i = a if flag == 0: while b &...

xiazai12358的博客 246

leetcode】-42. Trapping Rain Water雨水

Trapping Rain Water题目暴力法备忘录优化双指针 题目 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. The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1

211

LeetCode42. Trapping Rain Water - Python

问题描述:42.雨水给定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问题分析:方法一,我们观察其中...

Growth Diary 3818

【Python刷力扣hot100】42. Trapping Rain Water

探讨了计算雨水收集量的四种解法:暴力法、动态规划、单调栈和双指针法。暴力法通过遍历每个柱子的左右最高点计算接水量,时间复杂度为O(n^2);动态规划通过预处理左右最大值数组优化到O(n)时间复杂度;单调栈利用栈结构横向计算雨水层;最优解双指针法在O(n)时间O(1)空间内完成计算,通过移动指针动态维护左右最大值。四种方法逐步优化,最终双指针法在时间空间复杂度上达到最优。

tao355667 899

LeetCode42. Trapping Rain Water 解题报告(Python)

题目分析: 这个题可以先找出最大值,然后从两侧逼近最高值,以左侧为例说明:左侧值高则可蓄水(让左侧的值减去当前值),否则更新左侧值然后循环,右侧与左侧思路相同,代码已有注释,不再详细解释。 测试代码: class Solution: def trap(self, height): if height == []: return 0 max_num = max...

L141210113的专栏 913

#LeetCode刷题——42.雨水

1、题目介绍 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 2、思路分析 1、第一种方法:暴力法 首先能想到的是求出每个柱子的存水量,在累加起来就好了。 (1)、没跟柱子的存水量是:以当前柱子为起始点,找到左右俩边的最大值,用左右俩边最大值中的较少值 - 当前柱子的高度 (2)、从第二根柱子开始,高度为2,左边最大值为 4,右边最大值 5 ,存水量 = min(5,4)- 2 = 2...

YZG ' BLOG 851

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

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

大学在读,感谢关注 4074

LeetCode42.雨水问题

LeetCode42.雨水问题 LeetCode地址 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 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 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height = [4,2,0,3,2,5] 输出:9 提示: n == hei

风小猪的博客 655

算法---LeetCode 42.雨水

1. 题目 原题链接 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 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 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height = [4,2,0,3,2,5] 输出:9 提示: n == height.length 0 <= n &l

知北行的博客 424

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的博客 1289

leetcode刷题(79)——42.雨水

一、题目 给定 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 二、思路——动态规划 我们的整体思路是:求出每一列能接的雨水,将所有列接的雨水加起来就是结果。 下面我们分析怎么求每一列能接的雨水: 如果当前

kezhou的博客 408

DB Browser for SQLCipher!!!!!!

用于打开微信加密的数据库EnMicroMsg.db,当然也可以打开其它使用sqlcipher加密的数据库。ps: 尝试了好多软件。1、比如sqlcipher官网下载的,windows版本全是shell,按照教程始终无法打开。csdn好多收费的sqlCipher,还挺贵,结果没有用。2、sqlLite2009 Pro。这个也是打开不了。打开稍大一点的db,还会直接卡死在那里。3、DB Browser for SQLlite, 这个和资源名称很像,但是也打不开,你只能使用DB Browser for SQLCipher才能打开。

审计大数据应用场景设计图例.rar

审计大数据应用场景设计图例.rar

上一篇: ML:Scikit-Learn 学习笔记(3) --- Nearest Neighbors 最近邻 回归及相关算法
下一篇: Leetcode #43. Multiply Strings 字符串相乘 解题报告
学术状态抽奖器
博客等级 码龄14年 249粉丝 270原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值