题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
思路:定义一个辅助栈,原有的存储数据的栈按正常进出栈;数据进栈的时候,和辅助栈栈顶元素比较,小于等于栈顶元素则辅助栈,辅助栈为空时直接压入;出栈时,将数据栈要出栈的元素和辅助栈栈顶元素比较,相等则辅助栈出栈。
这样,辅助栈栈顶一直是数据栈中的最小元素。
java实现:
public class StackWithMin {
Stack<Integer> dataStack=new Stack<Integer>();//
Stack<Integer> minStack=new Stack<Integer>();
public void push(int node) {
dataStack.push(node);
if(minStack.isEmpty()||node<=minStack.peek()){
minStack.push(node);
}
}
public void pop() {
if(dataStack.peek()==minStack.peek()) {
minStack.pop();
}
dataStack.pop();//注意顺序辅助栈出栈后,数据栈再出
}
public int top() {
return dataStack.peek();
}
public int min() {
return minStack.peek();
}
public static void main(String[] args) {
}
}