借助一个辅助栈,如果目标元素比辅助栈的栈顶元素小时,同时压入辅助栈,否则再一次压入辅助栈的栈顶元素。这样可以实现辅助栈栈顶元素永远表示是data栈中的最小值。
如图所示:
import java.util.Stack;
public class Solution {
Stack<Integer> data = new Stack<Integer>(); //定义数据栈,用来存放要求数据
Stack<Integer> min = new Stack<Integer>(); //定义辅助栈,data栈中每压入一个元素,min也压入最小值。用来存放最小值
//data栈和min栈压入元素
public void push(int node) {
data.push(node);
//如果min栈为空或者是目标元素小于min栈顶元素,则压入目标元素入min栈
if(min.size()==0 || node < min.peek()){
min.push(node);
}
//如果不符合则重复压入min栈顶元素一次
else {
min.push(min.peek());
}
}
//data栈和min栈弹出元素
public void pop() {
if(data.size() > 0 && min.size() > 0){
data.pop();
min.pop();
}
return;
}
//data栈的栈顶元素
public int top() {
if(data.size()>0){
return data.peek();
}
return 0;
}
//min栈的栈顶元素
public int min() {
if(min.size()>0 && data.size()>0){
return min.peek();
}
return 0;
}
}