题目:
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
要求:
1、pop、push、getMin操作的时间复杂度都是O(1)
2、设计的栈类型可以使用现成的栈结构
解决办法:
使用两个栈,一个栈用来保存当前栈中的元素,其功能和一个正常的栈没有区别,这个栈记为stackData; 另一个栈用于保存每一步的最小值,这个栈记为stackMin。具体实现方式如下:
1 同步压入 1
2 重复压入 1 1
1 同步压入 1
5 重复压入3 3
4 重复压入3 3
3 同步压入 3
stackData stackMin
class Stack():
def __init__(self):
self.item = []
def pop(self):
if len(self.item)==0:
return "the Stack is empty"
else:
self.item.pop()
def push(self,item):
self.item.append(item)
def peek(self):
return self.item[len(self.item)-1]
class MyStack():
def __init__(self):
self.stackData = Stack()
self.stackMin = Stack()
def push(self,num):
if len(self.stackMin.item) == 0:
self.stackMin.push(num)
elif num < self.getmin():
self.stackMin.push(num)
else:
newnum = self.stackMin.peek()
self.stackMin.push(newnum)
self.stackData.push(num)
def pop(self):
if len(self.stackData.item)==0:
return "the stackData is empty"
self.stackMin.item.pop()
return self.stackData.item.pop()
def getmin(self):
if len(self.stackMin.item) == 0:
return "the stackMin is empty"
return self.stackMin.peek()
s =MyStack()
s.push(3)
s.push(4)
s.push(5)
s.push(1)
s.push(2)
s.push(1)
s.stackData.item
s.stackMin.item