本题的最小栈与常规栈的区别就在于
需要一个能在常数时间内返回最小值的功能
考虑到任何时候我们都需要能够返回最小值
我们需要在每一次录入元素的时候,都计算当前时刻的最小值
因此,在每次push的时候,我们都需要记录一个min
因此,很容易想到,记录min值的数据结构和原栈的长度一样
因此预备一个list专门在push的时候储存最小值
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.realmin = None
self.premin = None
self.stack = []
self.minstack = []
self.stackdict = {}
def push(self, x: int) -> None:
self.stack.append(x)
if self.minstack == []:
self.minstack.append(x)
elif self.minstack[-1] <= x:
self.minstack.append(self.minstack[-1])
else:
self.minstack.append(x)
def pop(self) -> None:
self.minstack.pop(-1)
return self.stack.pop(-1)#-1]#-1)
#thisvalue = self.stack.pop()
#self.stackdict[thisvalue] -= 1
#if self.stackdict[thisvalue] == 0:
# del self.stackdict[thisvalue]
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.minstack[-1]