Leetcode42接雨水(单调栈)

news2024/11/13 7:56:45

题目

题目链接

解法一

求出前缀最大和后缀最大,用两者较小值减去当前高度,累加即可,这个思路容易想到,这里不赘述

class Solution {
public:
    int trap(vector<int>& height) {
        vector<int> preMx(height.size()), postMx(height.size());
        int mx = 0;
        for (int i = 0; i < height.size(); i++) {
            preMx[i] = mx;
            mx = max(mx, height[i]);
        }
        mx = 0;
        for (int i = height.size() - 1; i >= 0; i--) {
            postMx[i] = mx;
            mx = max(mx, height[i]);
        }
        int ans = 0;
        for (int i = 0; i < height.size(); i++) {
            int mi = min(preMx[i], postMx[i]);
            if (mi - height[i] > 0) {
                ans += mi - height[i];
            }
        }
        return ans;
    }
};

解法二

主要学习单调栈的写法,解法一是考虑下竖着计算,计算每个位置的水的高度,而单调栈则是横着计算,如下图:
在这里插入图片描述
维护一个栈,满足从栈底到栈顶元素大小递减。如果当前元素高于栈顶,且栈内有至少2个元素,则形成了一个凹槽,及一个图中横着的红色矩形,将它的面积累加即可,第一次写难在维护单调栈中计算面积和。

class Solution {
    public int trap(int[] height) {
        int[] stack = new int[20010];
        int top = -1, ans = 0;
        for (int i = 0; i < height.length; i++) {
            while (top != -1 && height[i] > height[stack[top]]) {
	            //高度为(Math.min(height[i], height[stack[top-1]]) - height[stack[top]])
	            //宽度为(i - stack[top-1] - 1)
                if (top >= 1) {
                    ans += (Math.min(height[i], height[stack[top-1]]) - height[stack[top]]) * (i - stack[top-1] - 1);
                }
                top--;
            }
            stack[++top] = i;
        }
        return ans;
    }
}

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

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

相关文章

故障检测(同相/反相放大器+电压跟随器)+概念(开环/闭环增益+增益的频率依赖性+3dB/单位增益带宽+增益-频率依赖性+相移)

2024-8-28&#xff0c;星期二&#xff0c;20:19&#xff0c;天气&#xff1a;阴雨&#xff0c;心情&#xff1a;晴。今天没什么事情发生&#xff0c;继续学习。 今天完成了第六章运算放大器的学习&#xff0c;开始了第七章运算放大器响应的学习&#xff0c;主要学习内容为&…

毕 业 设 计(论 文)远程接入企业网络规划与设计

毕 业 设 计&#xff08;论 文&#xff09; 远程接入企业网络规划与设计 毕业设计论文中文摘要 随着Internet技术的日益普及&#xff0c;网络技术的飞速发展&#xff0c;企业信息化工作越来越受到重视&#xff0c;进入二十一世纪后&#xff0c;企业信息化不再满足于个人或单…

使用WireShark的tshark命令,在window系统Cmd命令行抓包(附环境变量的设置)

WireShark在window系统Cmd命令行的抓包应用 工作中&#xff0c;有时候会遇到抓特定数据包的情况&#xff0c;但是却不知道这个特定数据包什么时候出现。因此就需要有设备值守抓包&#xff0c;这时就可以使用wireshark提供的tshark命令抓包。 一、抓包需求&#xff1a; 例如&am…

【虚拟化】KVM常用命令操作(virsh虚拟机常用操作之开关|连接|自启|克隆|快照)

目录 ​编辑一、KVM概述 1.1 KVM工具栈 1.2 libvirt架构概述 二、使用virsh管理虚拟机 三、kvm基本功能管理 1.帮助命令 2.KVM的配置文件存放目录 3.查看虚拟机状态 4.虚拟机关机与开机 5.强制虚拟机系统关闭电源 6.通过配置文件启动虚拟机系统 7.修改虚拟机配置文…

【项目实战】MobileNetV3 医学病理识别+不使用全连接预测+迁移学习+附代码数据教程

目录 简言. 环境搭建&快速开始 1. 数据集制作 2、训练教程 2.1 迁移学习 2.2 卷积自编码器,不使用全连接 2.3训练 3 实际推理 结果: 简言. 环境搭建&快速开始 大家好,我是cv君,今天带来以前的干货,mobilenet v3的优化,能在医学病理分类中得到优异准确率…

C++语法基础(一)

第一个C程序 1. <iostream>&#xff08;C&#xff09; <iostream> 是 C 标准库中的头文件&#xff0c;用于处理输入输出操作。它提供了基于流&#xff08;stream&#xff09;的输入输出机制。 特点&#xff1a; 面向对象&#xff1a;C 中的输入输出操作是基于流…

力扣面试经典算法150题:加油站

加油站 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a;加油站。 题目链接&#xff1a;https://leetcode.cn/problems/gas-station/description/?envTypestudy-plan-v2&envIdtop-interview-150 问题描述 在一条环路上有 n 个加油站&#xff0c;其中第 i…

pySCENIC报错、解决和完整流程(IOS系统)

该文首发于生信技能树&#xff0c;推文链接&#xff1a;https://mp.weixin.qq.com/s/W23Reg6Hi4XWxpMvfctP8g 明白了基因调控网络的基础知识之后&#xff0c;就可以尝试实际操作一下SCENIC分析。 基因调控网络的基础知识可见推文&#xff1a;https://mp.weixin.qq.com/s/sL_8…

海康二次开发学习笔记4-参数模块配置

参数模块配置 参数配置控件 工具箱中提供了两个参数配置控件. VmParamsConfigControl是不带渲染的参数配置控件.VmParamsConfigWithRenderControl是带渲染的参数配置控件. 1. VmParamsConfigWithRenderControl 配置模块数据源 private void button3_Click(object sender, …

90%的设计师都不知道的设计神器,教你一招快速搞定中秋节创意海报设计!

设计师们&#xff0c;这是不是你&#xff1a;素材多到眼花缭乱&#xff0c;想用的时候总是找不到&#xff1f;海报设计千篇一律&#xff0c;完美没灵感&#xff1f;别担心&#xff0c;今天就来聊聊如何用千鹿设计助手&#xff0c;快速制作一张创意满满的中秋海报&#xff01; …

若依后端 MyBatis改为MyBatis-Plus

引用 1.引入MyBatis-Plus依赖 在总目录的pom.xml&#xff0c;导入依赖 <mybatis-plus.version>3.4.3</mybatis-plus.version> <!-- mybatis-plus 增强CRUD --> <dependency> <groupId>com.baomidou</groupId> <artifactId>…

关机软件项目规划

一、概述 1.1 编写目的 此项目开发规划书的编写主要是为《UPS SNMP卡网络监控系统》中配套使用的关机软件做主要的规划和整合&#xff0c;在开发过程中起到引导作用&#xff0c;以及给使用者提供简要的说明。 1.2 项目背景 关机软件是UPS网络监控适配器项目监控层的组成部分…

16岁激活交学费银行卡需要本人实名电话卡,线下营业厅不给办,怎么办?

16岁激活交学费银行卡需要本人实名电话卡&#xff0c;线下营业厅不给办&#xff0c;怎么办&#xff1f; 话卡办理规定&#xff1a; 根据《民法典》和《电话用户真实身份信息登记规定》的相关要求&#xff0c;未满16周岁的用户通常需要在监护人的陪同下办理电话卡&#xff0c;并…

IO多路复用几种函数

1. select() 函数原型 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);参数说明 nfds&#xff1a;指定文件描述符的范围。这个值应设置为所有文件描述符中最大值加一。例如&#xff0c;如果监视的文件描述符是 0 到 …

斯坦福大学cs231n (图像分类)

1.介绍 当作图像分类时&#xff0c;分类系统接收一些分类图像&#xff0c;比如猫咪。并且系统清楚了一些已经确定了分类或者标签的集合。那么&#xff0c;计算机的工作就是根据图片&#xff0c;给他分配一些固定的分类或者标签。 对于一个计算机来说&#xff0c;这是一个非常…

【CVPR‘24】DeCoTR:使用 2D 和 3D 注意力增强深度补全

DeCoTR: Enhancing Depth Completion with 2D and 3D Attentions DeCoTR: Enhancing Depth Completion with 2D and 3D Attentions 中文解析摘要介绍方法方法3.1 问题设置3.2 使用高效的 2D 注意力增强基线3.3 3D中的特征交叉注意力点云归一化位置嵌入3.4 捕捉 3D 中的全局上下…

软件测试常见面试题汇总(2024版)

一、常见的面试题汇总 1、你做了几年的测试、自动化测试&#xff0c;说一下 selenium 的原理是什么&#xff1f; 我做了五年的测试&#xff0c;1年的自动化测试&#xff1b; selenium 它是用 http 协议来连接 webdriver &#xff0c;客户端可以使用 Java 或者 Python 各种编…

MySQL的InnoDB、MyISAM的参数及常见错误码

1&#xff1a;参数 参数&#xff0c;也被称之为MySQL的系统变量&#xff0c;这些变量是影响MySQL运行的关键&#xff0c;对每个参数做出不同调整&#xff0c;都有可能直接影响到线上数据库的性能&#xff0c;具体的完整系统参数可参考《MySQL官网文档-系统变量》&#xff0c;官…

图表检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

图表检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

通过写文件方式写入 Hive 数据

通过写文件方式写入 Hive 数据 Hive最简单的写入数据方式就是通过Hive Jdbc写入Hive数据&#xff0c;但这并不是写入Hive最高效的方法。 Hive通过读取相关Hdfs的文件来获取数据信息&#xff0c;而通过直接写入Hdfs文件数据达到写入Hive数据的效果&#xff0c;这是目前最高效的…