刷题方法:单调栈

Posted MISAYAONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题方法:单调栈相关的知识,希望对你有一定的参考价值。

#单调栈理论
是什么?

先顾名思义,即为栈中元素永远都是单调递增或者单调递减的情况。
遇到新元素,如果满足单调递增或者递减,则直接入,如果不满足,那么不断弹出最后一个元素,直到满足规则为止,也就是说,新元素必须要入到这个栈中,而老元素不满足条件的直接弹出

什么时候用?

用处:当你需要高效率获取某个位置左右两侧比他大(或小)的数的位置的时候就可以用到单调栈 O(n) 的时间效率。


#找到当前数字的下一个(更小、更大)数字
#找到当前数字的上一个(更小、更大)数字

怎么写?

单调递增栈:

#单调递增栈
#找到下一个更小的值
#找到上一个更小的值
def nextGreaterNum(a):
    print a
    #栈中存的是数字对应下标
    stack = []
    #若没有下一个比它更大的数字,那么这个位置就是-1
    res = [-1 for x in a]
    res_1 = [-1 for x in a]
    for i in range(len(a)):
        print stack
        while stack and a[stack[-1]] > a[i]:
            #不满足单调递增条件的情况下,弹出的元素一定大于当前元素,那么这些元素的下一个更小的值就是当前数字
            res[stack.pop

以上是关于刷题方法:单调栈的主要内容,如果未能解决你的问题,请参考以下文章

刷题总结——玉蟾宫(bzoj3039单调栈)

LeetCode刷题(161)~下一个更大元素 I哈希+单调栈

单调队列单调栈

一道Medium,两道Hard带你刷爆力扣单调栈(模板解题,学不会来捶我,建议收藏)

算法实战74.使括号有效的最少添加⭐️中等——单调栈

单调栈问题汇总