您的位置:首页 > 职场人生

面试题21 包含Min函数的栈

2016-06-14 11:55 274 查看
题目:

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: