class MinStack(object): def __init__(self): self.stack = [] def push(self, val): if not self.stack: self.stack.append((val, val)) else: mn = min(self.stack[-1][1], val) self.stack.append((val, mn)) # print(self.stack) def pop(self): if self.stack: # print(self.stack) self.stack.pop() def top(self): if self.stack: # print(self.stack) return self.stack[-1][0] return 0 def getMin(self): if self.stack: # print(self.stack) return self.stack[-1][1] return 0 minStack = MinStack() minStack.push(-2) minStack.push(0) minStack.push(-3) minStack.push(4) minStack.getMin() # return -3 minStack.pop() minStack.top() # return 0 minStack.getMin() # return -2 # 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()