问题描述:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求调用min函数的时间复杂度为O(1),可以把每次的最小元素放到一个辅助栈中,能够保证辅助栈的栈顶一直都是最小元素当最小数据元素从数据站中弹出,同时弹出辅助栈的栈顶元素,此时辅助栈的新栈顶元素就是下一个最小值。这样能够保证,取了最小元素后,下一次取的时次小的元素(仍然是最小的)。
import java.util.Stack;
public class MinFunctionStack {
Stack<Integer> data = new Stack<Integer>();
Stack<Integer> assist = new Stack<Integer>();
public void push(int node) {
data.push(node);
if(assist.size() == 0 || node < assist.peek()){
assist.push(node);
}else{
assist.push(assist.peek());
}
}
public void pop() {
if(data.size() > 0 && assist.size() >0){
data.pop();
assist.pop();
}
}
public int top() {
if(data.size() > 0){
return data.peek();
}
return -1;
}
public int min() {
if(data.size() >0 && assist.size() > 0){
return assist.peek();
}
return -1;
}
}