class Stack:
def __init__(self):
self.items = []
def empty(self):
return len(self.items) == 0
def size(self):
return self.items
def peek(self):
if not self.empty():
return self.items[-1]
else:
return None
def pop(self):
if len(self.items)>0:
return self.items.pop()
else:
return None
def push(self,item):
self.items.append(item)
class MyStack:
def __init__(self):
#用来存储栈中元素
self.elemStsck = Stack()
#栈顶永远存储在当前elemStack中最小值
self.minStack = Stack()
def push(self,data):
self.elemStsck.push(data)
if self.minStack.empty():
self.minStack.push(data)
else:
if data<self.minStack.peek():
self.minStack.push(data)
def pop(self):
topData = self.elemStsck.peek()
self.elemStsck.pop()
if topData == self.mins():
self.minStack.pop()
return topData
def mins(self):
if self.minStack.empty():
return None
else:
return self.minStack.peek()
if __name__ == '__main__':
stack = MyStack()
print(stack.mins())
stack.push(3)
print(stack.mins())
这种方法额外申请一个栈的空间来保存栈中最小的元素,从而达到O(1)时间复杂度求栈中最小元素目的,担付出空间的复杂度为O(N)