class MinStack:
def __init__(self):
self.stack = []
self.minStack = []
"""
[3,0,1]
[3,0,0]
"""
def push(self, val: int) -> None:
minVal = min(val, self.minStack[-1] if self.minStack else val)
self.stack.append(val)
self.minStack.append(minVal)
def pop(self) -> None:
self.stack.pop()
self.minStack.pop()
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.minStack[-1]
trick
- use a
minStack
that keeps track of the minimum value
- every time we push a value, we also keep track of the most recent smallest number
- getting the minimum at this point of
self.stack