classMinStack:def__init__(self):
self.stack =[]defpush(self, val:int)->None:iflen(self.stack)==0:# 空栈
self.stack.append((val, val))# 栈中最小值就是自身else:
self.stack.append((val,min(val, self.stack[-1][1])))# 最小值= min(当前值,之前栈中的最小值)defpop(self)->None:iflen(self.stack)==0:passelse:
self.stack.pop()# 将栈顶的一对元组值都弹出,如果弹得就是最小值,也不用担心,因为此时栈中的最小值也更新成之前栈中的最小值了。deftop(self)->int:return self.stack[-1][0]defgetMin(self)->int:return self.stack[-1][1]# Your MinStack object will be instantiated and called as such:# obj = MinStack()# obj.push(val)# obj.pop()# param_3 = obj.top()# param_4 = obj.getMin()
辅助栈
classMinStack:def__init__(self):
self.stack =[]
self.minstack =[]defpush(self, val:int)->None:
self.stack.append(val)ifnot self.minstack or val <= self.minstack[-1]:# 保存最小值的栈;=的意思是,如果stack弹出了一个最小值,其实最小值还是同样大小的最小值,而minstack没有保存两个同样的最小值的话,就会出现错误
self.minstack.append(val)defpop(self)->None:
val = self.stack.pop()if val == self.minstack[-1]:
self.minstack.pop()deftop(self)->int:return self.stack[-1]defgetMin(self)->int:return self.minstack[-1]# Your MinStack object will be instantiated and called as such:# obj = MinStack()# obj.push(val)# obj.pop()# param_3 = obj.top()# param_4 = obj.getMin()