刷题方法:单调栈
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
以上是关于刷题方法:单调栈的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode刷题(161)~下一个更大元素 I哈希+单调栈