题目
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。
解题思路
由于查询最小元素需要常数时间,故不能使用查找算法,需要维护一个辅助栈(同步栈)
辅助栈helper和data保持同步增长。
对于辅助栈:
if not self.helper or x < self.helper[-1]:#辅助栈同步增长
self.helper.append(x)
else:
self.helper.append(self.helper[-1])
以及:
self.helper.pop()#辅助栈同步弹出
代码
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.data = []
self.helper = []#辅助栈
def push(self, x: int) -> None:
self.data.append(x)
if not self.helper or x < self.helper[-1]:#辅助栈同步增长
self.helper.append(x)
else:
self.helper.append(self.helper[-1])
def pop(self) -> None:
self.data.pop()
self.helper.pop()#辅助栈同步弹出
def top(self) -> int:
return self.data[-1]
def getMin(self) -> int:
return self.helper[-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.getMin()