一、牛客网和leetcode题目一样
定义栈的数据结构,请在类型中实现一个能够得到栈最小元素的min函数。
class MinStack(object):
def __init__(self):
self.stack = []
self.min_stack = []
def push(self, node):
# write code here
self.stack.append(node)
if not self.min_stack:
self.min_stack.append(node)
else:
if node >self.min_stack[-1]:
self.min_stack.append(self.min_stack[-1])
else:
self.min_stack.append(node)
def pop(self):
self.stack.pop()
self.min_stack.pop()
def top(self):
# write code here
if self.stack:
return self.stack[-1]
else:
return []
def min(self):
# write code here
return self.min_stack[-1]
思路:
1、使用两个stack,一个为数据栈,另一个为辅助栈。数据栈用于存储所有数据,辅助栈用于存储最小值。
2、第一次压入操作时,辅助栈为空,所以不管大小直接将该元素压入辅助栈(判断语句中体现该点),比如为3。
3、接下来第二次往数据栈里压入数字4。由于4大于之前的最小值,因此我们只要入数据栈,不压入辅助栈。
4、出栈:都出栈。
5、获得栈顶元素的时候:直接返回数据栈的栈顶元素。
6、栈最小元素:直接返回辅助栈的栈顶元素。