首页 > 其他分享 >浅谈单调栈

浅谈单调栈

时间:2023-12-17 20:58:16浏览次数:31  
标签:20 浅谈 32 栈中 序列 比较 单调

单调栈,顾名思义,具有单调性的栈。

  • 单调,指满足一个序列是一个从小到大的序列或从大到小的序列。

  • 栈(\(stack\))是以一种线性存储结构,它具有以下特点:栈中的数据元素遵守“先进后出(\(First\ in\ Last\ out\))”的原则,简称 FILO 结构;限定只能在栈顶进行插入和删除操作。

所以,何为单调栈,我们只需要维护一个具有单调性的栈

如何维护一个具有单调性的栈,我们以单调递增栈为例。

  • 将一个元素插入单调栈时,为了维护栈的单调性,需要在保证将该元素插入到栈顶后整个栈满足单调性的前提下弹出最少的元素

  • 我们来模拟一下单调栈的过程。

  • 例如,现在栈中自底向顶的序列为 \(\{0,2,5,10,32\}\)。

    • 现在,我们需要将 \(3\) 加入栈中。
      • 我们比较 \(0\) 和 \(3\) 的大小,发现 \(0<3\),所以将 \(0\) 弹出栈。
      • 我们接着比较 \(2\) 和 \(3\) 的大小,发现 \(2<3\),所以将 \(2\) 弹出栈。
      • 我们接着比较 \(5\) 和 \(3\) 的大小,发现 \(5>3\),所以 \(3\) 进入栈。比较结束。
      • 此时栈中自底向顶的序列为 \(\{3,5,10,32\}\)。
    • 接着,我们需要将 \(20\) 加入栈中。
      • 我们比较 \(20\) 和 \(3\) 的大小,发现 \(3<20\),所以将 \(3\) 弹出栈。
      • 我们接着比较 \(20\) 和 \(5\) 的大小,发现 \(5<20\),所以将 \(5\) 弹出栈。
      • 我们接着比较 \(20\) 和 \(32\) 的大小,发现 \(32>20\),所以 \(20\) 进入栈。比较结束。
      • 此时栈中自底向顶的序列为 \(\{20,32\}\)。

标签:20,浅谈,32,栈中,序列,比较,单调
From: https://www.cnblogs.com/Jasonshan10/p/17909774.html

相关文章

  • 浅谈Nim游戏
    浅谈Nim游戏首先,我们需要了解\(Nim\)游戏是什么东西。\(Nim\)游戏指:两个人,有\(n\)堆数,每堆有\(a_i\)个,每次可以且仅可以取一堆中的若干个数,求问先手有没有必胜策略(当然两个人都足够聪明)。首先,先研究显然的必胜策略。比如,我们要得到\(0\)这个数,那么当你取完时还......
  • 年关将近,浅谈近年Android开发技术趋势
    前言回头看看2023马上就要结束了,时间过的太快,不敢相信我已经从事Android开发几年了,不免生出一些感叹。那么到了2023年底,Android端会有什么技术趋势吗?或者哪些[新]技术值得去学?又或者对我来说,现在什么[值得]去学?本文我将分享一些我个人的技术学习经历以及分享一些近些年......
  • 浅谈Qt信号槽的实现原理
    背景:1、使用信号槽,需要先“Q_OBJECT”2、通过connect函数进行信号槽绑定3、通过emitsignal()发送信号原理:1、Q_OBJECT是一个预编译命令,可生成很多函数、变量。生成存储Connection对象的列表。2、connect函数需要四个信息:信号发送者、信号、接受者、槽函数connect函数生成......
  • 浅谈 JSON 对象和 FormData 相互转换
    前言大家都知道,前端在和后台进行交互联调时,肯定避免不了要传递参数,一般情况下,params在get请求中使用,而post请求下,我们有两种常见的传参方式:JSON对象格式和formData格式,但是一些场景是需要我们对这两种数据格式进行转换的,例如表单提交,有些是JSON对象格式的数据,有些是F......
  • 浅谈一下对SpringBoot的理解
    简化Spring+SpringMVC的开发1.Maven导入依赖Starter依赖管理:SpringBoot的Starter依赖简化了项目的依赖管理。通过导入预配置的Starter依赖,开发者可以轻松地引入一组相关的库和配置,而无需手动管理每个库的版本和依赖关系。约定大于配置:使用Starter依赖遵循了Spri......
  • 转DM8的SQL性能优化思路浅谈系列(二)
    ########sample2  https://www.modb.pro/db/635695干货攻略】达梦数据库DM8的SQL性能优化思路浅谈系列(二)们在上一次的分享中已介绍SQL优化的重要性,预估执行计划生成及基础说明和达梦性能分析思路。今天我们接着来聊一下达梦数据库参数调整、跟踪存储过程中的慢SQL思路及辅......
  • 浅谈一类边权带指数的图论问题
    偶然看到了这道题,求的是边权为\(n^w\)次方时树上的第\(k\)小路径,觉得这类题目很有意思,就研究了一下。1.CF464ETheClassicProblem题意:给一个无向图,每条边的边权是\(2^{w_i}\),求\(s\)到\(t\)的最短路。思路:首先,我们可以把距离看成一个二进制数,那么我们需要能支持快......
  • 浅谈设计模式-工厂模式的设计思想以及细节问题(上篇)
    1什么是工厂模式?工厂模式,顾名思义,就是把将对象的实例化过程封装在工厂类中的方式。工厂负责生产相应的对象实例。一般分为两种工厂模式:简单工厂;抽象工厂优点:用户不需要解决具体的细节问题,利用工厂类进行生产产品细节;可以将对象的创建与使用代码分离,提供一种统一的接口来创建不同类......
  • 【教程】浅谈ios混淆和加固加密
    ​混淆:针对项目代码,代码混淆通常将代码中的各种元素(变量、函数、类名等)改为无意义的名字,使得阅读的人无法通过名称猜测其用途,增大反编译者的理解难度。虽然代码混淆可以提高反编译的门槛,但是对开发者本身也增大了调试除错的难度。开发人员通常需要保留原始未混淆代码用于调试。......
  • 刷题 ST表、单调栈、线段树->区间最值
    2023.12.13cf1904D2解题思路首先,a[i]大于b[i]时肯定不行,等于就满足了,直接过掉其次,要想使得a[i]等于b[i],就要在a[i]左右找最近的j使得a[j]=b[i](最近的最优,可证)k是i和j中间的一个数,想要满足题意,要满足以下两个条件(a[j]=b[i])1.ak<aj,即max(区间[i,j]中的ak)2.bk>bi,即min(区间......