Leetcode:42. 接雨水(单调栈C++)

news2024/12/26 23:24:37

目录

42. 接雨水

题目描述:

实现代码与解析:

单调栈

原理思路:


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
  • 1 <= n <= 2 * 104
  • 0 <= height[i] <= 105

实现代码与解析:

单调栈

class Solution {
public:
    int trap(vector<int>& height) {
        int res = 0;
        stack<int> st;

        for (int i = 0; i < height.size(); i++)
        {
            while (st.size() && height[i] > height[st.top()])
            {
                int mid = st.top(); // 中间
                st.pop();
                if (st.empty()) break; // 需要有左侧墙
                int l = st.top(); // 左侧
                int w = i - l - 1; // 宽度
                int h = min(height[l], height[i]) - height[mid]; // 高度为左右墙中最低的减去中间的
                res += w * h;
            }
            st.push(i);
            //循环过后,左侧的墙就会变为下一次中间的墙,从而填满其他层
        }
    return res;
    }
};

原理思路:

        单调栈,和一般的单调栈差不多,但是这里栈中必须要有两个元素来构成左侧和在中间,如果只有一个元素,那么不能装雨水,右侧墙就为第一个比其大的值,

        和下面单调栈的题同。Leetcode:496. 下一个更大元素 I、503. 下一个更大元素 II(单调栈C++)_Cosmoshhhyyy的博客-CSDN博客

        宽度就为其左侧和右侧的差值+1,高度显然就为左右两侧的最小值减去中间,然后相乘算出此次两侧墙高度差能装的体积。

        大家最好根据代码和例子的图片带入演绎一遍,可以更好的理解,光看代码一上来确实有点懵。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot配置外部Tomcat项目以及启动流程源码分析

1.SpringBoot配置外部Tomcat并打war包 2.SpringBoot配置外部Tomcat项目启动流程源码分析

调戏chatGPT(三)逻辑推理

chatGPT已经被吹的神乎其神了&#xff0c;今天我来测试一下chatGPT的逻辑推理能力 t 你好 你好&#xff01;很高兴能与您交流。 T 今天我想考考你的智力&#xff0c;看看你的逻辑思维能力如何 太好了&#xff01;我非常乐意 t 一根质地不均匀的绳子完全烧完需要1小时…

【云原生 | 57】Docker三剑客之Docker Swarm֯使用其他服务发现后端

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

Android 为什么设计只有主线程更新UI?

选择方案的选择 单线程更新UI多线程更新UI 从问题本身考虑就两个方案不是单线程就是多线程。 下面是个人根据具体情况分析&#xff0c;如果有什么不对的地方&#xff0c;欢迎指正。 从开发效率来看&#xff0c;开发一个 单线程UI 库&#xff0c;会显得非常容易&#xff0c;而…

动态gif图片如何快速制作?分享一招快速制作gif动画

动态gif图片对大家来说都不陌生了&#xff0c;常常会在各种社交平台中见到&#xff0c;那么&#xff0c;这种gif动图片要怎么制作呢&#xff1f;很简单&#xff0c;给大家分享一款专业的gif制作&#xff08;https://www.gif.cn/&#xff09;工具-GIF中文网&#xff0c;只需要上…

【多维BFS】AB路线

P2038 - AB 路线 - ZJHUOJ 题意&#xff1a; 思路&#xff1a; 首先看是什么影响了决策&#xff0c;即能不能走这个格子 走到当前格子是第几步和格子的字符种类影响了能不能走该格子&#xff0c;因此需要多加一维k&#xff0c;表示走到当前字符种类的第k步 然后就可以去BFS…

Jvm对象创建-JVM(六)

上篇文章说了jvisualvm工具查看年轻代老年代gc过程。 Jvisualvm&内存模型剖析-JVM&#xff08;五&#xff09;https://blog.csdn.net/ke1ying/article/details/131524708 jvm创建对象 之前我们介绍了类的加载&#xff0c;这篇文章要介绍类的创建&#xff0c;过程主要是&a…

通俗易懂生成对抗网络GAN原理(二)

生成对抗网络&#xff08;Generative Adversarial Network, GAN&#xff09;的原理 学习李宏毅机器学习课程总结。 前面学习了GAN的直观的介绍&#xff0c;现在学习GAN的基本理论。现在我们来学习GAN背后的理论。 引言 假设x是一张图片&#xff08;一个高维向量&#xff09;…

「AntV」使用AntV X6实现流程编排设计器

通过对BPMN的深入学习&#xff0c;以及对业界成熟的流程编排设计器的调研&#xff0c;了解到要研发一个流程编排设计器&#xff0c;需要实现如下几个主要的功能&#xff1a; 支持创建各种流程图元素&#xff0c;包括任务&#xff08;活动&#xff09;、网关、事件等。支持绘制…

漏洞复现 || NginxWebUI 后台命令执行runCmd远程命令执行

免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此…

【Linux】yum git 的使用

yum 的使用 yum 源的查看 yum 源就是一个配置文件。 可以看到 yum 源的文件中包含有很多下载源的链接。我们使用 yum 命令进行安装的时候&#xff0c;就是通过这些链接去寻找下载源进行下载的。这些链接一般都是国内的镜像网址。 所谓的更新 yum 源&#xff0c;也就是将最新…

异步交互技术Ajax

Ajax 概念&#xff1a;Asynchronous JavaScr And XML 异步的JavaScript和XML作用&#xff1a; 数据交换&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务响应的数据异步交互&#xff1a;可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部…

mysqldump + python 定时备份数据库

场景&#xff1a; 需要对mysql进行定时备份&#xff0c;受限于硬盘空间的大小&#xff0c;需要对备份的数据需要定时清理 python代码实现&#xff1a; # -*- coding:UTF-8 -*- """ProjectName : HotelGo2DelonixPmxFileName : fix_missing_ratesDescripti…

第二章:L2JMobius学习 – 安装jdk17

L2JMobius是一套开源的 LineageII 的服务器端代码&#xff0c;使用Java语言编写。想要运行L2JMobius源程序的话&#xff0c;需要安装jdk17版本。首先&#xff0c;下载jdk17版本。 https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.msi 当然&#xff0c;也…

华为OD机试真题 Java 实现【新员工座位安排系统】【2022Q4 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 一、题目描述 工位由序列F1,F2…Fn组成&#xff0c;Fi值为0、1或2。其中0代表空置&#xff0c;1代表有人&#xff0c;2代表障碍物。 1、某一空位的友好度为左右连续…

ModaHub魔搭社区:腾讯云发布的向量数据库有什么特点?技术架构是什么样的?

腾讯云发布的向量数据库有什么特点&#xff1f;技术架构是什么样的&#xff1f; Tencent Cloud VectorDB从性能上看&#xff0c;具备高性能、高可用、低成本等优势&#xff0c;比如单索引支持10亿级向量规模&#xff0c;最快支持毫秒级数据实时更新&#xff0c;适用于AI运算、…

【STM32】自举模式 和 程序下载(ST-Link和串口示例)

STM32官方网站STM32中文社区 如果遇到不清楚的概念&#xff0c;可以看之前的文章。 一、自举模式二、程序下载2.1 概述2.2 实操2.21 SWD 方式下载&#xff08;ST-Link&#xff09;2.22 串口下载 一、自举模式 STM32有一个特殊的功能&#xff0c;就是可以通过不同的方式启动程序…

maven 工程结构 和 archetype 模板

文章目录 一、maven 工程结构1.1. jar 工程结构1.2. war 工程结构 二、archetype 模板2.1. 推荐的 archetype 模板2.2. 自定义 archetype 模板2.2.1 自定义模板示例 有没有好奇过&#xff0c;通过 Maven 生命周期命令构建项目时&#xff0c;我们并没有指定源文件目录和编译后的…

5张图告诉你:同样是职场人,差距怎么这么大?

点赞 ➕ 评论 ➕ 收藏 养成三连好习惯 在职场中&#xff0c;我们常常会听到各种各样的抱怨&#xff1a; &#x1f469;‍⚖️‍ 小A: 凭什么别人每次述职绩效都是优秀呀&#xff1f; 感觉TA也没干啥呀! &#x1f575; 小B: 凭啥这个事情&#xff0c;领导指派TA去对接呀&#…

“设计模式”概述

设计模式代码样例&#xff1a;Git 设计原则 依赖倒置原则&#xff08;DIP&#xff09; 高层模块&#xff08;稳定&#xff09;不应依赖底层模块&#xff08;变化&#xff09;&#xff0c;二者都应依赖于抽象&#xff08;稳定&#xff09;抽象不应依赖于实现细节&#xff0c;…