题目:包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:占了python的便宜,直接用min()函数。
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack = []
def push(self, node):
# write code here
self.stack.append(node)
def pop(self):
# write code here
if self.stack != []:
self.stack.pop(-1)
def top(self):
# write code here
if self.stack != []:
return self.stack[-1]
else:
return None
def min(self):
# write code here
return min(self.stack)
正要八经的思路:
设置一个变量存放最小值,每一次压栈的时候进行比较。再设置一个辅助栈,用于存放当前栈的最小值(设置辅助栈是因为,若最小值出栈了,最小值需要进行更新,因此需要辅助栈来保存次小值)
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack = []
self.minstack = []
self.minm = float('inf')
def push(self, node):
# write code here
if node < self.minm:
self.minm = node
self.minstack.append(self.minm)
self.stack.append(node)
def pop(self):
# write code here
if self.stack != []:
if self.stack[-1] == self.minm:
self.minstack.pop()
self.stack.pop(-1)
def top(self):
# write code here
if self.stack != []:
return self.stack[-1]
else:
return None
def min(self):
# write code here
return self.minstack[-1]