包含min功能的栈:要求设计一个栈,除了正常进出栈以外,还有一个输出最小值的功能。
首先自然而然可以想到python自带的min函数……
其实沿着min函数的思路走,如果我们想要搜索一个list的最小值,我们可以从左往右遍历,然后先找到前两个元素的较小者,再将其与第三个元素比较,得出更小者,再向后比较,以此类推。那么对本题也是类似,我们可以使用上述的判断方法,同时设置一个辅助栈,用于存放当前栈的最小值。设置辅助栈是因为,若最小值出栈了,最小值需要进行更新,因此需要辅助栈来保存次小值。基于这个思路,我们可以很快写出代码。
# offer26-solution
class Solution:
def __init__(self):
self.stack = []
self.minstack = []
def push(self, node):
self.stack.append(node) # 正常入栈
if self.minstack == [] or node < self.min(): # 辅助栈的push
self.minstack.append(node)
else:
self.minstack.append(self.min())
def pop(self):
if self.stack == [] or self.minstack == []: # 出栈和普通判断
return None
self.stack.pop()
self.minstack.pop()
def top(self): # 出栈
return self.stack[-1]
def min(self): # 出辅助栈
return self.minstack[-1]
比起前面的链表题,和后面的二叉树,这几道题算蛮简单的……