剑指Offer编程题-包含min函数的栈
题目:包含min函数的栈
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
解题思路
使用两个列表,一个保存数据,一个保存最小值,如:
li: [ 5, 7, 4, 6, 3, 8, 9, 2, 10 ]
mi: [ 5, 4, 3, 2 ]
在栈push的时候,数据列表直接添加新值,如果新值小于mi列表中最后一项,则也添加到mi列表中。在栈pop的时候,数据列表直接pop,如果pop出的值等于mi列表中最后一项,那么mi列表也pop出最后一项。栈的min函数直接取mi列表的最后一项。
实现
python
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.li = []
self.mi = []
def push(self, node):
# write code here
self.li.append(node)
if not self.mi or self.mi[len(self.mi)-1] > node:
self.mi.append(node)
def pop(self):
# write code here
v = self.li.pop()
if v == self.mi[len(self.mi)-1]:
self.mi.pop()
return v
def top(self):
# write code here
if len(self.li) > 0:
return self.li[len(self.li)-1]
return None
def min(self):
# write code here
return self.mi[len(self.mi)-1] if len(self.mi) > 0 else None