【题目】:实现一个栈,在实现基础功能的基础上提供获取最大最小值的功能
【要求】:pop、push 、getmin、getmax操作时间复杂度均为o(1)
【分析】:栈的基本功能是先进后出,本题对时间要求高对空间没有,所以这类题目一般是以空间换时间,空间和时间一般都是相互对立的。
# -*- coding: utf-8 -*-
"""
基于列表实现栈 实现 pop push getmin getmax o(1)操作
栈: 先进后出
"""
class Stack(object):
def __init__(self):
self.stack = []
self.minStack = [] # 记录栈中最小数据
self.maxStack = [] # 记录栈中最大数据
def push(self, num):
self.stack.insert(0, num)
if len(self.minStack) == 0:
self.minStack.insert(0, num)
else:
if self.minStack[0] >= num:
self.minStack.insert(0, num)
if len(self.maxStack) == 0:
self.maxStack.insert(0, num)
else:
if self.maxStack[0] <= num:
self.maxStack.insert(0, num)
def pop(self):
return self.stack[0] if len(self.stack) > 0 else None
def getMin(self):
return self.minStack[0] if len(self.minStack) > 0 else None
def getMax(self):
return self.maxStack[0] if len(self.maxStack) > 0 else None
if __name__ == '__main__':
stack = Stack()
test_list = [5, 8, 4, 1, 0, 3, 9, 8, 7]
for test in test_list:
stack.push(test)
print "============ 栈测试输出 =================="
print "最大值: %s" % stack.getMax()
print "最小值: %s" % stack.getMin()
print "============ 栈测试输出 =================="