什么是单调栈?(例如,它与单调队列有何不同?)
例如,考虑以下整数数组:[0, 2, 1, 3, 4]
。如果我从左到右处理这个数组并将其插入单调递减的堆栈中,我应该在堆栈中看到什么,以及为什么?
这里是一个在Python中用于解决奇偶跳问题的单调递减栈示例,它显然被用在了许多解决方案中:
def make(A):
result = [None] * N
stack = [] # invariant: stack is decreasing
for i in A:
while stack and i > stack[-1]:
result[stack.pop()] = i
stack.append(i)
return result
如果我在以下输入上运行它
A = [0, 2, 1, 3, 4]
,我会得到 [2,3,3,4,None]
。我发现其中包括两个3和一个 None
值是很奇怪的。这实际上是否正确实现了单调栈?