题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,请用mim,push,pop的时间复杂度都为O(1)
输入:
10,20,9
输出:
最小元素:9
解题思路:
如果仅仅用一个栈,那么当出栈的时候如果是最小元素,我们无法获得此小元素,因此,我们可以使用一个辅助栈,当我们插入一个元素的时候,让他和辅助栈的栈顶对比,如果小于辅助栈栈顶,也插入辅助栈,如果不是,辅助栈就插入辅助栈的栈顶元素。当出栈的时候,两个栈同时弹出。这样始终辅助栈的栈顶为最小元素。
Java代码实现:
public class Stacks {
<span style="white-space:pre"> </span>//主栈和辅助栈
public static Stack<Integer> dataStack=new Stack<Integer>();
public static Stack<Integer> minStack=new Stack<Integer>();
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
push(10);
push(20);
push(9);
pop();
System.out.println(min());
}
private static void push(int data){
dataStack.push(data);
if(minStack.size()==0 ||minStack.lastElement()>data){
minStack.push(data);
}else{
minStack.push(minStack.lastElement());
}
}
private static void pop(){
if(dataStack.size()>0 && minStack.size()>0){
dataStack.pop();
minStack.pop();
}
}
private static int min(){
if(dataStack.size()>0 && minStack.size()>0){
return minStack.lastElement();
}
return -1;
}
}