Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
push(x) – Push element x onto stack.
pop() – Removes the element on top of the stack.
top() – Get the top element.
getMin() – Retrieve the minimum element in the stack.
思路
栈的特点,先进先出。一个栈不会从中间取走值,只能从顶部放入和取走。
入栈一个值的时候需要更新最小值,最小值会变小或者不变。而出栈的时候,最小值则会恢复到它上面的值进来之前的状态。
解决方式
肯定要一个【主栈】记录值。
另外使用另一个栈【最小值栈】来记录最小值,栈顶即为当前最小值。
每次【主栈】入栈,【最小值栈】也入栈,对比新值与当前栈顶值,入小的那一个。
每次【主栈】出栈,【最小值栈】也出栈。
getMin则返回【最小值栈】栈顶值。
代码
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.minstack = []
self.stack = []
def push(self, x: int) -> None:
self.stack.append(x)
if len(self.minstack) == 0 or x < self.minstack[-1]:
self.minstack.append(x)
else:
self.minstack.append(self.minstack[-1])
def pop(self) -> None:
self.stack.pop(-1)
self.minstack.pop(-1)
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.minstack[-1]