题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
解题方案
本题的重点在于min函数是要多次调用的,即不能使用一个变量来存储当前的最小值,所以在这里我使用了辅助栈作为最小值的保存。在存储数据栈的时候同步将最小栈存储,当当前传入的数据值小于当前最小值的时候我们让最小值入数据栈和最小值栈,当当前传入的数据值大于当前的最小值时,我们将当前值入数据栈,并将当前的最小值再次入最小值栈。
举例如下所示:
入栈顺序 3 5 2 8 6 1
数据的栈 3 5 2 8 6 1
最小值栈 3 3 2 2 2 1
import java.util.Stack;
public class Solution {
//当前栈
Stack<Integer> stack = new Stack<Integer>();
//当前栈的最小值变化历史栈
Stack<Integer> minStack = new Stack<Integer>();
public void push(int node) {
//如果最小值大于当前压入栈的数值,则将node赋予最小值并将该值存入最小值栈中
if(minStack.size() == 0 || node < minStack.peek()){
minStack.push(node);
}else{
minStack.push(minStack.peek());
}
//将传入的值存入当前栈中
stack.push(node);
}
public void pop() {
//如果当前栈本身为空,则直接返回即可
if(stack.size() == 0) return;
//否则同步弹出即可
stack.pop();
minStack.pop();
}
public int top() {
return stack.peek();
}
public int min() {
return minStack.peek();
}
}