代码
class MinStack:
### 1116 辅助栈(76 ms,16.6 MB)
def __init__(self):
"""
initialize your data structure here.
"""
# 数据栈A用于保存全部元素,实现栈正常的运算逻辑
# 辅助栈B用于保存A中所有非严格递减的元素,B的栈顶元素始终维护A中的最小元素
self.A, self.B = [], []
def push(self, x: int) -> None:
self.A.append(x)
# 若辅助栈B非空 或 B的栈顶元素大于等于x,则当前元素入栈B
if not self.B or self.B[-1] >= x: # 取等表示非严格递减,应对多个重复最小值的情况
self.B.append(x)
def pop(self) -> None:
# 若A出栈的值是最小值,则辅助栈B也应该出栈
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]
# 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()