class MinStack: def __init__(self): self.stack = [] self.minstack = [] def push(self, val: int) -> None: self.stack.append(val) if len(self.minstack) == 0: self.minstack.append(val) elif val < self.minstack[-1]: self.minstack.append(val) else: self.minstack.append(self.minstack[-1]) 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] # Your MinStack object will be instantiated and called as such: # obj = MinStack() # obj.push(val) # obj.pop() # param_3 = obj.top() # param_4 = obj.getMin() Complexity Time: Push: Amortized O(1), Pop: O(1), Top: O(1), GetMin: O(1) Space: O(n)