题目
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
1.pop、push、getMin操作的时间复杂度都是O(1)。2.设计的栈类型可以使用现成的栈结构。
解答
使用一个栈保存每次入栈的元素;使用一个辅助栈保存当前栈的最小元素。
当push一个元素x时,考虑:
- 如果辅助栈为空,那么将该元素x压入辅助栈;
- 如果辅助栈不为空,比较辅助栈栈顶元素和当前元素x,如果x小于等于栈顶元素,则将该元素压入辅助栈
当pop一个元素x时,考虑:
- 如果辅助栈 栈顶元素 < x,则当前最小值依然不变,不更新辅助栈;
- 如果辅助栈 栈顶元素 == x,则说明当前最小值已经弹出,需要更新辅助栈。

代码
class MinStack:def __init__(self):"""initialize your data structure here."""self.stack = []self.auxStack = []def push(self, x: int) -> None:if not self.stack or x <= self.auxStack[-1]:self.auxStack.append(x)self.stack.append(x)def pop(self) -> None:if self.stack.pop() == self.auxStack[-1]:self.auxStack.pop()def top(self) -> int:return self.stack[-1]def min(self) -> int:return self.auxStack[-1]# Your MinStack object will be instantiated and called as such:# obj = MinStack()# obj.push(x)# obj.pop()# param_3 = obj.top()# param_4 = obj.min()
