day61--单调栈2

news2024/10/5 19:12:33
  •  503.下一个更大元素II 
  •  42. 接雨水  

第一题:下一个更大元素2

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。

示例 1:

  • 输入: [1,2,1]
  • 输出: [2,-1,2]
  • 解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。

0、与单调栈思路相同,不过本题需要循环数组

关于处理循环数组,简单的方法就是讲数组复制一遍,然后将两个数组拼接起来,用单调栈求下一个最大值,拼接一次肯定可以找到下一个最大值

或者直接把数组走两遍。

1、注意直接遍历两边数组,容易出现超时

进行合并操作,对于nums[i%nums.size()]>nums[st.top()]且st.empty()不为空

result[st.top()]=nums[i%nums.size()];

然后弹出top位置上的元素

其他情况,也就是相等的情况,塞进栈里

第二题:接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

思路很重要,

首先暴力解法的思路是,比如计算第4列的雨水,第四列高度1,左边最高柱子是3,高度是2,右边最高柱子是7,高度是3,所以第四列的雨水高度为min(lheight,rheight)-height。也就是2-1=1

然后乘以第四列的宽度1,水的体积就是1*1=1;然后遍历所有柱子,就可以求出所有的雨水。但该方法超时

单调栈方法:

按照行计算雨水体积:

栈的单调应该是从栈头到栈底为从小到大顺序。

  • 情况一:当前遍历的元素(柱子)高度小于栈顶元素的高度 height[i] < height[st.top()]
  • 情况二:当前遍历的元素(柱子)高度等于栈顶元素的高度 height[i] == height[st.top()]
  • 情况三:当前遍历的元素(柱子)高度大于栈顶元素的高度 height[i] > height[st.top()]

进入栈的顺序都是递减的,如果新进来的元素大于栈顶元素,肯定比如213,就出现了凹槽,也就可以接水,计算此时可以装多少雨水

也就是利用单调栈找到数组中存在凹槽的位置。

class Solution {
public:
    int trap(vector<int>& height) {
        if(height.size()<=2) return 0;
        stack<int> st;
        st.push(0);
        int sum=0;
        for(int i=1;i<height.size();i++){
            if(height[i]<height[st.top()]){//当前元素小于栈顶元素,塞进去
                st.push(i);
            }
            if(height[i]==height[st.top()])//当前元素等于栈顶元素,将之前的弹出去
            {
                st.pop();
                st.push(i);
            }
            else{                               //出现了凹槽的情况,可以接雨水了
                while(!st.empty()&& height[i]>height[st.top()]){
                    int mid=st.top();
                    st.pop();
                    if(!st.empty()){
                        int h=min(height[st.top()],height[i])-height[mid];
                        int w=i-st.top()-1;//求宽度
                        sum+=w*h;
                    }

                }
                st.push(i);
            }
        }
        return sum;

    }
};

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

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

相关文章

在微信小程序中怎么实现拼团活动

随着互联网的快速发展&#xff0c;拼团活动已成为一种时尚的购物方式。在微信小程序中&#xff0c;拼团活动同样受到广大用户的青睐。本文将为你介绍微信小程序中实现拼团活动的方法&#xff0c;让你轻松玩转团购&#xff0c;享受优惠乐趣。 一、微信小程序拼团活动的优势 方便…

【ReID】1、行人重识别模型

文章目录 一、概念二、实现方案三、代码 一、概念 ReID&#xff0c;也就是 Re-identification&#xff0c;其定义是利用算法&#xff0c;在图像库中找到要搜索的目标的技术&#xff0c;所以它是属于图像检索的一个子问题。 说白了&#xff0c;在监控拍不到人脸的情况下&#…

Samtec连接器技术科普 | 无线电源充电和Samtec EMI技术

摘要/前言 还记得&#xff0c;数年前&#xff0c;第一次在民用层面大量出现无线充电的时候&#xff0c;我们大部分人都被这样的“黑科技”所震惊。 时至今日&#xff0c;从前只能在科幻电影中看到的场景&#xff0c;都在逐一成为现实&#xff0c;而无线电源、无线充电等应用早…

基于SSM框架的电脑测评系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

leetcode:762. 二进制表示中质数个计算置位(python3解法)

难度&#xff1a;简单 给你两个整数 left 和 right &#xff0c;在闭区间 [left, right] 范围内&#xff0c;统计并返回 计算置位位数为质数 的整数个数。 计算置位位数 就是二进制表示中 1 的个数。 例如&#xff0c; 21 的二进制表示 10101 有 3 个计算置位。 示例 1&#xf…

爆火的小红书app拉新项目 地推网推百搭项目 附申请渠道

小红书app拉新在市场还是饱受地推团队和网推团队的喜爱&#xff0c;作业流程操作简单 可以通过“聚量推客”申请小红书app拉新推广 下面附送小红书app的拉新流程&#xff0c;目前也分为普通版本和高价版本&#xff08;普通版本更稳定&#xff0c;高价版本属于短期活动&#x…

双11购物节想入手一款音画好的智能电视,大家推荐一下吧?

智能家电更新太快,不想三五年后就淘汰,那就入手东芝电视Z700吧,Z700这次把观影体验和音箱效果做到哇塞,既然要享受生活那就要享受高品质的体验。东芝电视拥有70余年的原色调校技术,每款产品都有专属的日本调校工程师匠心打造,可以真实还原画面色彩,而且还有火箭炮音响系统,也是…

安卓 车轮视图 WheelView kotlin

安卓 车轮视图 WheelView kotlin 前言一、代码解析1.初始化2.初始化数据3.onMeasure4.onDraw5.onTouchEvent6.其他 6.ItemObject二、完整代码总结 前言 有个需求涉及到类似这个视图&#xff0c;于是在网上找了个轮子&#xff0c;自己改吧改吧用&#xff0c;拿来主义当然后&…

com.genuitec.eclipse.springframework.springnature

com.genuitec.eclipse.springframework.springnature

计算机毕业论文内容参考|基于spingboot的金融投资顾问推荐系统

文章目录 导文文章重点摘要前言绪论课题背景:国内外现状与趋势:课题内容:相关技术与方法介绍系统分析系统设计系统实现总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于spingboot的金融投资顾问推荐系统 文章重点 摘要 基于SpingBoot的金融投资顾问推荐…

大功率电源的应用场景有哪些(高压功率放大器)

大功率电源的应用非常广泛&#xff0c;其应用场景包括但不限于以下几个方面&#xff1a; 工业生产&#xff1a;大功率电源广泛应用于各种工业生产领域&#xff0c;如机床、冶金、化工、电力等。例如&#xff0c;用于驱动液压系统、加热炉、电焊机等设备。 实验室研究&#xff1…

百分点科技受邀参加“第五届治理现代化论坛”

11月4日&#xff0c;由北京大学政府管理学院主办的“面向新时代的人才培养——第五届治理现代化论坛”举行&#xff0c;北京大学校党委常委、副校长、教务长王博&#xff0c;政府管理学院院长燕继荣参加开幕式并致辞&#xff0c;百分点科技董事长兼CEO苏萌受邀出席论坛&#xf…

Leetcode2918. 数组的最小相等和

Every day a Leetcode 题目来源&#xff1a;2918. 数组的最小相等和 解法1&#xff1a;贪心 设数组 nums1 的元素总和为 sum1&#xff0c;其中 0 的个数为 countZero1&#xff1b;数组 nums2 的元素总和为 sum2&#xff0c;其中 0 的个数为 countZero2。 题目要求我们必须…

selenium元素定位 —— 提高篇 CSS定位元素

CSS (Cascading Style Sheets) 是一种用于渲染 HTML 或者 XML 文档的语言&#xff0c;CSS 利用其选择器可以将样式属性绑定到文档中的指定元素。理论上说无论一个元素定位有多复杂都能够定位到元素。 因为不同的浏览器 XPath 引擎不同甚至没有自己的 Xpath 引擎&#xff0c;这…

SpringBoot整合Mybatis-plus代码生成器

整合代码生成器过程中,发现好多博主提供的无法使用,自己整合了一套,没有花里胡哨,直接可用 备注:常规的依赖自己导入,提供的这套,默认已经导入了mybatis-plus,srpingboot等依赖了. 1.maven依赖导入,版本号要与自己的版本号想同 <!--代码生成器依赖--><dependency>…

手撕 视觉slam14讲 ch13 代码 总结

运行效果 &#xff08;Kitti 00&#xff09;4倍速 一、代码 GitHub - tzy0228/Easy-VO-SLAM: VSLAM-CH13工程代码注释版本 二、编译过程 踩坑 视觉SLAM 十四讲第二版 ch13 编译及运行问题_全日制一起混的博客-CSDN博客 三、代码解读 手撕 视觉slam14讲 ch13 代码&#xff0…

共话医疗数据安全,美创科技@2023南湖HIT论坛,11月11日见

11月11日浙江嘉兴 2023南湖HIT论坛 如约而来 深入数据驱动运营管理、运营数据中心建设、数据治理和数据安全、数据资产“入表”等热点、前沿话题 医疗数据安全、数字化转型深耕者—— 美创科技再次深入参与 全新发布&#xff1a;医疗数据安全白皮书 深度探讨&#xff1a;数字…

7天入门python系列之准备工作

寄语 编者打算开一个python 初学主题的系列文章&#xff0c;用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python&#xff0c;这是一个紧凑的学习计划。但并不是不可完成的。 7天的安排 如果你想在7天内入门Python&#xff0c;…

QT开发的摄像头电子地图Demo(采用百度地图),提供源码下载

一、前言 本软件的工程是在QT-5.8 32位下开发&#xff0c;可以支持其他qtcreator 32位版本&#xff08;用32位是因为视频播放的码流库是32位&#xff09;。工程采用的地图是百度地图&#xff0c;需要在百度地图开发者网站上注册账号&#xff0c;并获取到密钥。本工程数据库采用…

【node+JS】前端使用nodemailer发送邮件

前言邮箱配置完整代码 前言 最近需要实现客户提交表单后&#xff0c;把表单的内容作为邮件发送到对应的邮箱&#xff0c;不通过后端服务&#xff0c;前端直接进行发送。嘶——&#xff0c;说干就干&#xff01; 一通搜索下来&#xff0c;get到方法有很多种&#xff0c;但是。。…