[数据结构] 单调栈

本文介绍了如何使用单调栈(递增栈和递减栈)来解决NextGreaterElementI问题,以及在DailyTemperatures中的应用实例。通过栈的特性找到序列中的下一个最大或最小值,是算法竞赛中常见的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[数据结构] 单调栈

单调栈为栈中元素按照升序排列(递增栈)或降序排列(递减栈)的栈,通常可以用来寻找下一个最大/最小的题。

[1,3,4,2] 数组实现一个递增栈:

  1. step 1

  2. setp2

    [1, 3, 4] 这里其实都没有什么问题,一直是处在递增的状态

  3. 遇到 2 时开始弹栈,遇到 1 时完成进栈操作

    step3

496. Next Greater Element I 这一题就可以用递减栈来实现。

题目中需要找到的是下一个最大数字,数组依旧时 [1,3,4,2]

  1. step 1

  2. 第二个数字为 3,$ 3 > 1 $,因此 31 的下一个最大数字,在这里进行将 1 弹出,并将 3 压入栈中

    setp 2

  3. 下一个数字为 4,同样也满足下一个最大数字的需求,因此实现同样的弹栈、入栈操作

    step 3

  4. 最后一个数字是 2,这之后没有更大的数字了,因此将其直接压入栈中

    step 4

    递减栈中弹出的值,是碰到了 比它本身更大的值,因此可以利用这一特性寻找下一个更大数。

同样的思想可以应用到 739. Daily Temperatures84. Largest Rectangle in Histogram 等题上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值