单调栈及其应用

news2024/10/7 4:33:13

1. 单调栈

  • 应用场景:求解下一个更大/小的数
  • 原理:空间换时间,暴力解法O(n)
  • 单调栈作用:记录遍历过的元素,与当前元素进行对比

模板:求解左边比它更小的元素

单调递增的栈(底——》顶)

image-20231108104812151

//单调递增的栈
import java.util.*;
class Main{
    static int N=100010;
    static int[] a=new int[N];
    static int[] res=new int[N];
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        for(int i=0;i<n;i++)a[i]=sc.nextInt();
        ArrayDeque<Integer> q=new ArrayDeque<>();
        for(int i=0;i<n;i++){
            while(!q.isEmpty() && a[i]<=q.peek())q.pop();
            if(q.isEmpty())res[i]=-1;
            else res[i]=q.peek();
            q.push(a[i]);
        }
        for(int i=0;i<n;i++)System.out.print(res[i]+" ");
        
    }
    
}
  • 如果求解右边比他更小的元素,可以倒着遍历
  • 如果是更大,则修改为单调递减的栈,也就是修改a[i]<=q.peek()
  • 栈中存放下标/元素:取决于是否需要计算宽度(坐标差)
  • =:具体情况具体分析

快速记忆

  • 单调减栈:比栈顶元素小,直接入栈
  • 单调增:比栈顶元素大:直接入栈

2.实战分析

image-20231108105513993

  • 分析可知,这是要求右边比他更大的元素
  • 所以:倒序遍历单调递减栈
class Solution {
    //求解右边第一个比他大的元素
    //计算宽度,所以存储下标
    public int[] dailyTemperatures(int[] t) {
        int n=t.length;
        int[] res=new int[n];
        ArrayDeque<Integer> sta=new ArrayDeque<>();
        for(int i=n-1;i>=0;i--){//倒序遍历
            while(!sta.isEmpty() && t[i]>=t[sta.peek()])sta.pop();//单调递减栈
            if(sta.isEmpty())res[i]=0;//为空时赋得值
            else res[i]=sta.peek()-i;
            sta.push(i);
        }
        return res;
        

    }
}

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

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

相关文章

Python的asyncio库:掌握异步编程的利器

目录 一、引言 二、异步编程概述 三、asyncio库的使用方法 1、导入asyncio库 2、创建异步函数 3、创建事件循环 4、运行异步任务 5、关闭事件循环 四、asyncio库的高级用法 1、异步上下文管理器 2、协程函数和协程变量的共享状态 五、注意事项 六、总结 一、引言 …

数字孪生技术助力水务行业实现智能化

在当今数字化时代&#xff0c;水务行业也积极迎接变革&#xff0c;数字孪生技术正成为该行业的一项重要助力。数字孪生不仅帮助水务行业实现智能化发展&#xff0c;还提供了许多重要的优势&#xff0c;为水资源管理、供水系统运营和环境保护等方面带来了巨大的改变。水务行业面…

阿里云服务器云盘性能IOPS和吞吐量说明SSD、ESSD和高效

阿里云服务器系统盘或数据盘支持多种云盘类型&#xff0c;如高效云盘、ESSD Entry云盘、SSD云盘、ESSD云盘、ESSD PL-X云盘及ESSD AutoPL云盘等&#xff0c;阿里云百科aliyunbaike.com详细介绍不同云盘说明及单盘容量、最大/最小IOPS、最大/最小吞吐量、单路随机写平均时延等性…

PHP分类信息网站源码系统 电脑+手机+微信端三合一 带完整前后端部署教程

大家好啊&#xff01;今天源码小编来给大家分享一款PHP分类信息网站类源码系统。这款源码系统是一套专业的信息发布类网站综合管理系统&#xff0c;适合各类地方信息和行业分类站点建站。随着这几年我们国家网民爆炸式的增 长&#xff0c;网络信息也随之越来越庞大&#xff0c;…

全国5米高程DEM数据及衍生的全国地形起伏度数据

地表起伏度&#xff0c;也有称为地势起伏度、地形起伏度&#xff0c;是指某点在其确定面积的域内的最高点与最低点之间的高差。地表起伏度概念的核心在于如何确定该点的计算域。在统计意义上&#xff0c;随着计算域范围的增大&#xff0c;地表起伏度将逐渐增大。 因此&#xff…

【Python自学笔记】Flask调教方法Internel Server Error

收到老师的小组作业任务说是写一个自动报告程序&#xff0c;用PythonSQLiteHTML实现&#xff0c;好吧。 前面没什么问题&#xff0c;打开VSCode&#xff0c;连数据库读数据处理可视化模板拼凑&#xff0c;最后调用Flask框架出网页报告的时候总报错连接不了。 但换了jinjia2的渲…

水利部加快推进小型水库除险加固,大坝安全监测是重点

国务院常务会议明确到2025年前&#xff0c;完成新出现病险水库的除险加固&#xff0c;配套完善重点小型水库雨水情和安全监测设施&#xff0c;实现水库安全鉴定和除险加固常态化。 为加快推进小型水库除险加固前期工作&#xff0c;水利部协调财政部提前下达了2023年度中央补助…

事业单位如何完成新闻宣传发稿考核任务

新闻宣传作为事业单位对外展示形象、传达政策、沟通信息的重要手段&#xff0c;其效果直接关系到单位的声誉和形象。许多事业单位会设立新闻宣传考核任务&#xff0c;同样作为单位宣传口的公务人员面临考核&#xff0c;也关系到机关事业单位的年度绩效和排名。 首先需要确保清楚…

【亚马逊云科技产品测评】活动征文|10分钟拥有一台AWS Linux系统

前言 在数字化时代&#xff0c;AWS云服务扮演着至关重要的角色。AWS&#xff08;Amazon Web Services&#xff09;是亚马逊公司旗下的云计算服务平台&#xff0c;为全球各地的企业、组织和个人开发者提供了一系列广泛而深入的云服务。 在AWS云服务中&#xff0c;计算、存储、数…

idea 模板参数注释 {@link}

1. 新增组 2. 设置方法注释及变量 增加模板文本 ** * $param$ * return {link $return$} */3. 设置变量表达式 勾选跳过param 参数表达式 groovyScript("def result ;def params \"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList();def param…

迅睿cms前台页面的会员登入和退出

迅睿cms前台页面的会员登入和退出 前端代码&#xff1a; {if $member} 登录用户名&#xff1a;{$member.username} {else} 没有登录 <a href"{dr_member_url(register/index)}" class"btn dark btn-outline btn-xs">用户注册</a> <…

JavaScript使用数组

数组(Array)是有序数据集合&#xff0c;具有复合型结构&#xff0c;属于引用型数据。数组的结构具有弹性&#xff0c;能够自动伸缩。数组长度可读可写&#xff0c;能够动态控制数组的结构。数组中每个值称为元素&#xff0c;通过下标可以索引元素的值&#xff0c;对元素的类型没…

腾讯、巨量等头部营销平台方法论

媒体、营销与市场生态正处于新一轮变革期&#xff0c;尤其是进入移动互联网时代后&#xff0c;行业话语权由创意人转向互联网人&#xff0c;营销的风向与规则&#xff0c;也越来越由掌握流量与资源的头部平台引领。 巨变之下&#xff0c;企业只有从本质层面&#xff0c;认清变…

文件传输|如何将100多G文件跨国安全传输到客户手里呢?

信息时代的高速发展&#xff0c;特别是跨国交易企业&#xff0c;很需要频繁地在跨国或跨地区间传递各类文件&#xff0c;如照片、视频、音频、文档、压缩包等。比如企业用户需要与海外的合作伙伴、供应商、客户传递合同文本、产品设计、市场分析等。然而&#xff0c;跨国文件传…

javaSSMMYSQL中学成绩管理系统98575- 计算机毕业设计项目选题推荐(附源码)

目 录 摘要 1 绪论 1.1背景及意义 1.2开发现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2 中学成绩管理系统分析 2.1 可行性分析 2.2 系统业务流程分析 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 中学成绩管…

Win10笔记本开热点后电脑断网的解决方法

在Win10笔记本电脑中用户可以随时打开热点&#xff0c;但是发现热点开启后电脑就会断网&#xff0c;网络不稳定就会影响到用户的正常使用。下面小编给大家介绍两种简单的解决方法&#xff0c;解决后用户在Win10笔记本电脑开热点就不会有断网的问题出现了。 具体解决方法如下&am…

Java 数据结构篇-实现双链表的核心API

&#x1f525;博客主页&#xff1a; 小扳_-CSDN博客 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 双链表的说明 1.1 双链表 - 创建 1.2 双链表 - 根据索引查找节点 1.3 双链表 - 根据索引插入节点 1.4 双链表 - 头插节点 1.5 双链表 - 尾插 1.6 双链表 - 根据索引来…

VS Code Counter统计代码量(vscode扩展工具)

1.VS Code Counter 该vscode扩展工具用于统计代码行数以及代码量等信息。 2. 安装 既可以点击左侧扩展图标&#xff0c;也可以 ShiftCtrlX vscode快捷命令打开扩展&#xff1a;商店&#xff0c;然后在商店中搜索 VS Code Counter&#xff0c;并点击安装。 3. 使用 使用时用…

ggrcs包3.5版本发布—增加了大家喜闻乐见的P for overall和主题色彩定制

目前本人写的ggrcs包新的3.5版本已经在CRAN上线&#xff0c;目前支持逻辑回归&#xff08;logistic回归&#xff09;、cox回归和多元线性回归。 需要的可以使用代码安装 install.packages("ggrcs")如果原来安装了旧版本&#xff0c;可以通过Rstudio进行升级 这样就…

ArcGIS丨SWAT丨农业水土环境及面源污染建模及对农业措施的响应

农业面源污染治理是生态环境保护的重要内容&#xff0c;事关农村生态文明建设&#xff0c;事关国家粮食安全和农业绿色发展&#xff0c;事关城乡居民的水缸子、米袋子、菜篮子。加强农业水土环境建模与农业面源污染治理与监督指导&#xff0c;可以保护生态环境&#xff0c;维护…