用栈实现push(添加元素),pop(删除栈顶元素),top(获取栈顶元素),并能在常数时间内检索到最小元素的栈
定义两个列表:列表1存放所有元素
列表2:只存比上一个数小的值,获取最小值时可以直接返回列表2的栈顶
class MinStack():
def __init__(self):
self.list1=[]
self.list2=[]
def push(self,item):
self.list1.append(item)
# 列表2只存比上一个数小的值 ,获取最小值时可以直接返回列表2的栈顶
if self.list2==[] or item<self.list2[-1]:
self.list2.append(item)
def pop(self):
# 只有在列表1和列表2的栈顶元素相等时才删除列表2
if self.list1[-1]==self.list2[-1]:
self.list2.pop()
self.list1.pop()
# 获取栈顶元素 直接返回列表1的栈顶
def top(self):
return self.list1[-1]
def getMin(self):
return self.list2[-1]
minStack=MinStack()
minStack.push(-4)
minStack.push(0)
minStack.push(-5)
print(minStack.getMin())
minStack.pop()
print(minStack.top())
print(minStack.getMin())