思路
创建一个辅助栈lmin,用于存放每次压入时的最小元素,即每当主栈压入元素时,比较本次压入元素与辅助栈最小元素的大小,如果当前元素小于辅助栈最小元素,则同时压入辅助栈,否则依旧将辅助栈中的最小元素再次压入辅助栈。但要注意第一次压入操作时,辅助栈为空,所以不管大小直接将该元素压入辅助栈(判断语句中体现该点)
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = []
self.stack_min = []
def push(self, x):
"""
:type x: int
:rtype: None
"""
self.stack.append(x)
if not self.stack_min or x < self.getMin():
self.stack_min.append(x)
else:
self.stack_min.append(self.getMin())
def pop(self):
"""
:rtype: None
"""
if not self.stack or not self.stack_min:
return None
self.stack_min.pop()
self.stack.pop()
def top(self):
"""
:rtype: int
"""
return self.stack[-1]
def getMin(self):
"""
:rtype: int
"""
return self.stack_min[-1]