题目来源:链接
题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
代码实现:
class MinStack:
def __init__(self):
self.A,self.B = [],[]
def push(self, x: int) -> None:
self.A.append(x)
if not self.B or self.B[-1] >= x:
self.B.append(x)
def pop(self) -> None:
if self.A.pop() == self.B[-1]:
self.B.pop()
def top(self) -> int:
return self.A[-1]
def min(self) -> int:
return self.B[-1]
解题思路:
因为我们需要返回min的复杂度为O(1),但是普通的min的复杂度是O(n)的
所以需要进行优化
维护一个单调递减列表B就行了,A是原列表
每次push的时候,要判断B【-1】也就是B中最小的是否>=push的元素,注意是 >=
pop的时候,如果是B中最小的,注意要把B中的也要pop,总之要维持B这个单调栈
B的元素一定在A中,所以Apop了则B可能也要pop