思路1:辅助栈,当然也可以使用排序
使用个辅助栈来存储和栈底的值相等或更小的元素。注意一定要存相等的,否则,最小值会提前出栈。
如果全部出栈了,自然没有最小值了。如果栈顶的值还在,自然能够保证能找到最小值
增:比minstack的最小值小或相等,才往minstack增加,是非升序的
删:删的数是最小数,那么minstack也要删除
时间复杂度O(1)
空间复杂度O(n):当所有的数相等是时候
class MinStack:
def __init__(self):
self.stack = [] # 存所有的数
self.minstack = [] # 存和栈底相等或更小的元素
def push(self, x: int) -> None:
self.stack.append(x)
if len(self.stack)==1 or x<=self.minstack[-1]: # 存
self.minstack.append(x)
def pop(self) -> None:
popval = self.stack.pop(-1)
if popval==self.minstack[-1]: # 和最小数相等 都弹出
self.minstack.pop(-1)
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.minstack[-1]