这道题需要用一个栈记录存放的数字,另一个递减栈存放最小值的情况。当push一个元素x时,当x小于递减栈的最小值时,需要将x放入递减栈中。pop一个元素时,同时需要检查它是否在递减栈并从递减栈中pop出。
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = []
self.minstack = []
def push(self, x):
"""
:type x: int
:rtype: None
"""
# 直接将x是否在递减栈记录为0/1存放在stack第二个元素位中
self.stack.append([x, 0])
if not self.minstack or x < self.minstack[-1]:
self.minstack.append(x)
self.stack[-1][1] = 1
def pop(self):
"""
:rtype: None
"""
if self.stack[-1][1] == 1:
del self.minstack[-1]
del self.stack[-1]
def top(self):
"""
:rtype: int
"""
return self.stack[-1][0]
def getMin(self):
"""
:rtype: int
"""
return self.minstack[-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()