题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
我们都知道栈是先进后出的,要实现栈中所含最小元素的min函数,可以从入栈时下文章。
在写min函数之前,做判断
在入栈时,判断最后一个元素与即将压入的元素大小关系,如果最后一个元素比压入元素大,那就压入
如果小,压入最后一个元素
class Solution:
def __init__(self):
#定义栈
self.stack = []
self.minValue = []
def push(self, node):
#添加
self.stack.append(node)
#最小值添加,先判断是否为空
if self.minValue:
#判断压入元素大小
if self.minValue[-1] > node:
self.minValue.append(node)
else:
self.minValue.append(self.minValue[-1])
def pop(self):
#弹出
if self.stack == []:
return None
self.stack.pop()
self.minValue.pop()
def top(self):
#栈顶元素
if self.stack == []:
return None
return self.stack[-1]
def min(self):
if self.minValue == []:
return None
return self.minValue[-1]#最后一个元素始终是最小的
test = Solution()
test.push(1)
test.push(4)
test.push(5)
test.min()
1
仔细想想难点就是在push元素的时候,只push最小的元素!!!!