力扣 42. 接雨水

news2024/12/25 9:06:29

题目来源:https://leetcode.cn/problems/trapping-rain-water/description/

C++题解1:双指针

按列算,一列一列的求雨水面积。使用双指针是记录当前列左右侧的最大元素。

class Solution {
public:
    int trap(vector<int>& height) {
        int result = 0;
        int len = height.size();
        vector<int> leh(len, 0), rih(len, 0);
        leh[0] = 0;
        rih[len-1] = 0;
        for(int i = 0; i < len; i++) {
            if(i + 1 < len) {
                leh[i+1] = max(leh[i], height[i]);
            }
            if(len-i-2 >= 0){
                rih[len-i-2] = max(rih[len-i-1], height[len-i-1]);
            }
        }
        for(int i = 0; i < len; i++) {
            int tmp = min(leh[i], rih[i]);
            if(tmp > height[i]) result = result + tmp - height[i];
        }
        return result;
    }
};

C++题解2:单调栈(注意:栈存放元素索引就可以直接找到元素值)

按行算,横向算法。用单调栈可以求单前列右侧大的元素值。

当height[i]比st.top()所在元素值大时,如果st弹出一个元素后不是空栈,那么说明一定有凹槽(能装雨水)。因为栈里存放的是索引,所以可以求出横向有多长(即上面箭头的长度);再比较一下height[i]与新的height[st.top()]的长短,可以求出纵向有多长;相乘即可求出箭头所在位置蓝色面积。

class Solution {
public:
    int trap(vector<int>& height) {
        int len = height.size();
        if(len <= 2) return 0;
        stack<int> st;
        int result = 0;
        for(int i = 0; i < len; i++) {
            while(!st.empty() && height[i] > height[st.top()]) {
                int tmp = st.top();
                st.pop();
                if(!st.empty()) {
                    result += (min(height[i], height[st.top()]) - height[tmp]) * (i - st.top() - 1);
                }
            }
            st.push(i);
        }
        return result;
    }
};

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

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

相关文章

中电联系列三:rocket手把手教你理解中电联协议!

分享《慧哥的充电桩开源SAAS系统&#xff0c;支持汽车充电桩、二轮自行车充电桩。》 前 言 T/CEC102《电动汽车充换电服务信息交换》共分为四个部分&#xff1a; ——第1部分&#xff1a;总则&#xff1b; ——第2部分&#xff1a;公共信息交换规范&#xff1b; ——第3部分&a…

【ARM Cache 及 MMU 系列文章 1.3 -- 如何判断 L2 Cache 是否实现】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 CPU Configuration Register代码实现CPU Configuration Register 在 armv9 架构中,我们可以通过arm 提供的自定义寄存器IMP_CPUCFR_EL1 来判断当前系统中是否实现了 L2 Cache, 如下所…

【Linux系统编程】进程终止

目录 strerror函数 errno错误码 退出码 正常终止&#xff08;可以通过 echo $? 查看进程退出码&#xff09;&#xff1a; 1. 从main返回&#xff08;return&#xff09; 2. 调用exit 3. _exit&#xff08;一般尽量不要用&#xff09; 异常退出&#xff1a; ctrl c&am…

django 旅游服务系统-计算机毕业设计源码88939

摘 要 旅游服务系统采用采用django框架、python语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、轮播图&#xff08;轮播图管理&#xff09;、公告信息管理&#xff08;公告信息&#xff09;、资源管理&…

解析 Spring 框架中的三种 BeanName 生成策略

在 Spring 框架中&#xff0c;定义 Bean 时不一定需要指定名称&#xff0c;Spring 会智能生成默认名称。本文将介绍 Spring 的三种 BeanName 生成器&#xff0c;包括在 XML 配置、Java 注解和组件扫描中使用的情况&#xff0c;并解释它们如何自动创建和管理 Bean 名称。 1. Be…

2024 年 5 月区块链游戏研报:市值增长、玩家参与变迁、迷你游戏兴起

作者&#xff1a;stellafootprint.network 数据来源&#xff1a;GameFi 研究页面 2024 年 5 月&#xff0c;以太坊的表现因 SEC 批准现货以太坊 ETF 的初步申请而得到显著提振。区块链游戏代币的总市值达到 201 亿美元&#xff0c;环比上涨 6.7%。然而&#xff0c;尽管市值有…

年薪80w的AI产品经理技术知识合集

前言 最近&#xff0c;有很多的小伙伴向我咨询&#xff0c;为什么他们学习了大量的产品相关知识&#xff0c;却依然难以转行成为AI产品经理。经过分析&#xff0c;我发现主要原因可以归结为三点&#xff1a;不系统、没产出、不懂技术。那么&#xff0c;如何才能突破这些障碍&a…

ES升级--05--快照生成 和备份

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 备份ES数据1.关闭集群自动均衡2.执行同步刷新3.停止集群节点的Elasticsearch服务4.修改Elasticsearch配置文件&#xff0c;开启快照功能&#xff0c;配置仓库目录为…

金融数据中心布线运维管理解决方案

金融行业的核心业务&#xff0c;如交易、支付、结算等&#xff0c;对网络的依赖程度极高。布线作为网络基础设施的重要组成部分&#xff0c;其稳定性和可靠性直接关系到业务的连续运行。因此&#xff0c;良好的布线管理能够确保网络系统的稳定运行&#xff0c;减少因网络故障导…

EVS9329-ES驱动器EVS9329ES可议价

EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES驱动器EVS9329ES可议价 EVS9329-ES步进电机按结构分类&#xff1a;步进电动机也叫脉冲电机&#xff0c;包括反应式步进电动…

VBA即用型代码手册:删除空列Delete Empty Columns

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

Transformer结合U-Net登上Nature子刊!最新成果让精度和效率都很美丽

最近一种基于视觉Transformer改进的U-Net来检测多光谱卫星图像中甲烷排放的深度学习方法登上了Nature子刊。与传统方法相比&#xff0c;该方法可以识别更小的甲烷羽流&#xff0c;显著提高检测能力。 这类Transformer与U-Net结合的策略是一种创新的深度学习方法&#xff0c;它…

账号密码无错误,xshell可以连接,但是WindTerm连接失败

xshell可以连接&#xff0c;但是WindTerm却连接失败 报错提示内容&#xff1a; 连接WindTerm是&#xff0c;账号密码是正确的&#xff0c;但是一输入账号&#xff0c;就报The remote host closed the connection错误&#xff0c;或者是Unknown error错误 解决方法 在新建…

数据可视化如何提升智慧展厅的展示效果

数据可视化是如何在智慧展厅中发挥作用的&#xff1f;随着科技的进步&#xff0c;智慧展厅成为展示信息、互动体验和传递品牌价值的前沿平台。数据可视化作为智慧展厅的重要组成部分&#xff0c;通过将复杂的数据转化为直观的图形、图表和互动界面&#xff0c;极大地提升了展厅…

echarts学习: 将y轴刻度标签放置到轴线内侧

前言 在上一篇文章中&#xff0c;我试图复现下面的这张图表。经过一番努力实现了对6条y轴的布局。 对比上面的两张图就会发现&#xff0c;效果图中所有y轴的刻度标签都在轴线内侧&#xff0c;而我的图表中y轴的刻度标签都在轴线外侧。 实现方法 这个实现起来也很简单&#xf…

解锁ChatGPT:从原理探索到GPT-2的中文实践及性能优化

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三连支…

部署LVS—DR群集

1、LVS-DR工作流向分析 &#xff08;1&#xff09;客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。 &#xff08;2&#xff09;Director Server 和 Real Se…

详细教学wps中公式如何居中,公式编号如何右对齐

废话少说&#xff0c;首先打开WPS&#xff0c;新建一个空白文档。 详细步骤如下&#xff1a; &#xff08;1&#xff09;新建一个模板样式&#xff0c;在开始一栏中&#xff0c;点击新建样式具体操作看下图&#xff1a; &#xff08;2&#xff09;设计样式 修改样式名称为公…

JavaScript的数据类型(基础数据类型和数据类型转换)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

华为OD技术面试-统计全1子矩形-2024手撕代码真题

题目描述: 给你一个 m x n 的二进制矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1: 输入:mat = [[1,0,1],[1,1,0],[1,1,0]] 输出:13 解释: 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3 个 2x1 的矩形。 有 1 个 2x2 的矩形。 有 1 个 3x1 的矩形。…