首页 > 其他分享 >2023.11.26 单调栈与字符串

2023.11.26 单调栈与字符串

时间:2023-11-26 14:22:06浏览次数:48  
标签:26 第一个 2023.11 元素 栈顶 插入 右侧 单调

cf上的1886C

从第一个字符开始往后,删除第一对第一个字符大于第二个字符的相邻字符组中的第一个字符。还没找到就一直入栈,当即将入栈元素和栈顶元素满足上述条件时,栈顶元素出栈,继续判断,直到待入元素满足入栈条件。(每一次有元素出栈,要执行一次查询位置减字符串长度,字符串长度减一)

 

单调栈

单调栈就是维护一个单调递增或者单调递减的栈,将时间复杂度降为O(n)

栈空或栈顶元素更优时元素入栈(老人仍然比新人强)

else 栈顶元素出栈(新人比老人年轻还比老人强)

单调栈一般用于解决一下几种问题:

  • 寻找左侧第一个比当前元素大的元素。

  • 寻找左侧第一个比当前元素小的元素。

  • 寻找右侧第一个比当前元素大的元素。

  • 寻找右侧第一个比当前元素小的元素。

 

1.寻找左侧第一个比当前元素大的元素
从左到右遍历元素,构造单调递增栈(从栈顶到栈底递增):

一个元素左侧第一个比它大的元素就是将其「插入单调递增栈」时的栈顶元素。

如果插入时的栈为空,则说明左侧不存在比当前元素大的元素。

 

2.寻找左侧第一个比当前元素小的元素
从左到右遍历元素,构造单调递减栈(从栈顶到栈底递减):

一个元素左侧第一个比它小的元素就是将其「插入单调递减栈」时的栈顶元素。

如果插入时的栈为空,则说明左侧不存在比当前元素小的元素。

 

3.寻找右侧第一个比当前元素大的元素
从左到右遍历元素,构造单调递增栈(从栈顶到栈底递增):

一个元素右侧第一个比它大的元素就是将其「弹出单调递增栈」时即将插入的元素。

如果该元素没有被弹出栈,则说明右侧不存在比当前元素大的元素。

从右到左遍历元素,构造单调递增栈(从栈顶到栈底递增):

一个元素右侧第一个比它大的元素就是将其「插入单调递增栈」时的栈顶元素。

如果插入时的栈为空,则说明右侧不存在比当前元素大的元素。

 

4.寻找右侧第一个比当前元素小的元素
从左到右遍历元素,构造单调递减栈(从栈顶到栈底递减):

一个元素右侧第一个比它小的元素就是将其「弹出单调递减栈」时即将插入的元素。

如果该元素没有被弹出栈,则说明右侧不存在比当前元素小的元素。

从右到左遍历元素,构造单调递减栈(从栈顶到栈底递减):

一个元素右侧第一个比它小的元素就是将其「插入单调递减栈」时的栈顶元素。

如果插入时的栈为空,则说明右侧不存在比当前元素小的元素。

 

上边的分类解法有点绕口,可以简单记为以下条规则:

无论哪种题型,都建议从左到右遍历元素。

查找 「比当前元素大的元素」 就用 单调递增栈,查找 「比当前元素小的元素」 就用 单调递减栈。

从 「左侧」 查找就看 「插入栈」 时的栈顶元素,从 「右侧」 查找就看 「弹出栈」 时即将插入的元素。

标签:26,第一个,2023.11,元素,栈顶,插入,右侧,单调
From: https://www.cnblogs.com/modemingzi-csy/p/17856950.html

相关文章

  • 微信小程序开发周记(11.20-11.26)
    实现1:下拉生成颜色可以不断显示随机颜色。下拉刷新可以重置颜色列表,上拉触底可以延申显示内容。wxml:<!--pages/getc/getc.wxml--><buttontype="primary"bind:tap="navifunc">后退</button><viewclass="num-item"wx:for="{{colorList}}"wx:key=......
  • 20231126GESP三级笔记
    逛商场点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;intn,a[N],x,ans=0;intmain(){cin>>n;for(inti=1;i<=n;i++)cin>>a[i];cin>>x;for(inti=1;i<=n;i++){if(a[i]<=......
  • 2023-11-26-周六-摆烂的一天
    早上8:50多就起床了...因为昨天晚上李涛约为打羽毛球...当时我并没有直接拒绝也没有答应,,,,,约的时间是周六9:00,打一小时的羽毛球,,,我也不知道为什么是打一个小时,,,早上8:50多在床上醒来后,我马上看看手机,,,,看李涛有没有发消息过来如果发消息了,就说明我9:00要去陪他打......
  • 学期:2023-2024-1 学号:20231426 《计算机基础与程序设计》第九周学习总结
    作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计作业这个作业的目标通过教材内容了解CPU调度、数组作业正文https://www.cnblogs.com/hhaxx/p/17856550.html教材学习内容总结《计算科......
  • 2023.11.17-20湖北 武汉 2023第五届全国生物医学数据挖掘与计算学术会议拟于2023年1
     2023第五届全国生物医学数据挖掘与计算学术会议拟于2023年11月17日-20日于华中科技大学举行。会议简介:     全国生物医学数据挖掘与计算学术会议是一个专注于生物医学大数据算法、软件与人工智能方法的重要学术盛会。生物医学领域的快速发展导致了大量的生物医学数据......
  • 2023.11.25 日记 OI·与否
    我揉了揉疲劳的脖子。白天是照常的模拟赛,题目简单但我的分数并不如意。晚上回来做AtCoderabc。打得也不好,C题太着急了,思路乱了十几分钟。F题现在还没调过。赛前定了切G的目标,但好像实力未到。全榜居然只有3个人切。我大概已经有了一个较为放松的OI心态了。我深知......
  • P2678 跳石头
    题目描述这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有N块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。为了提高比赛难度,组委会计划移走......
  • 聪明办法学python-11.23——11.26笔记打卡
      python的数据类型和操作1.数据类型和运算符:基本类型是:整形int  如1、34、-12浮点型float  如 1.23、-2.44布尔值bool  有真“True”假“False”  类型type 如:print(type(2))输出为:<class......
  • 2023.11.25——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.大数据技术明日计划:学习......
  • 聪明办法学Python_task2_11.22-11.26
    数据类型int(整型,即整数)str(字符串,单个长度使长度为1的字符串)float(浮点型,即小数,默认为双精度)bool(TrueorFalse)可通过type()函数输出数据类型强制转换,int(“1”)将字符串转化为整型1###整型,浮点型(数字型数据类型):可以对数字数据进行数学处理。int类型将省去小数部分。这意味......