前言:
当一眼看不出问题中隐藏的规律的时候,我们可以试着用一两个例子模拟操作的过程,这样说不定就能通过具体的例子找到抽象的规律。
可以举出一两个例子,告诉面试官问的算法是怎么一步步处理这个例子的。模拟压栈和弹出几个数字,分析每次操作之后数据栈,辅助栈和最小值是什么?
怎么检查代码呢?可以运行几个测试用例。
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
解题思路
我们很自然的可以想到,可以利用两个栈来实现该操作:一个栈sData用来存放数据,另一个栈sMin用来辅助更新最小值状态。
栈内压入3、4、2、1之后接连两次弹出栈顶数字之后再压入0时,数据栈、辅助栈和最小值状态举例如图所示:
python 代码实现:
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.sData = []
self.sMin = []
def push(self, node):
# write code here
self.sData.append(node)
if len(self.sMin) == 0:
self.sMin.append(node)
if self.sMin[-1] > node:
self.sMin.append(node)
def pop(self):
# write code here
if self.sData[-1] == self.sMin[-1]:
self.sMin.pop()
self.sData.pop()
def top(self):
# write code here
return self.sData[-1]
def min(self):
# write code here
return self.sMin[-1]