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

微软面试100题-天天做-第二题

2014-03-25 20:12 295 查看
2.设计包含min函数的栈(栈)

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。

要求函数min、push以及pop的时间复杂度都是O(1)。

package com.microsoft;

class Stack {
private int size;
private int top=-1;
private int [] data;

public Stack(int size){
this.size=size;
data=new int[size];
}
public void push(int value)throws Exception{
if(top==size){
throw new Exception("stack is full");
}
top++;
data[top]=value;

}

public int pop()throws Exception{
if(top<0){
throw new Exception("stack is empty");
}
int ret=data[top];
top--;
return ret;

}

public int getTop(){
return top;
}

public int getTopValue(){
return data[top];
}

}

public class MinStack{
private Stack dataStack;
private Stack minStack;

public MinStack(int size){
dataStack=new Stack(size);
minStack=new Stack(size);
}

public void push(int value)throws Exception{
if(minStack.getTop()==-1||minStack.getTopValue()>=value){
minStack.push(value);
}
dataStack.push(value);
}

public int pop()throws Exception{
int ret=dataStack.pop();
if(ret==minStack.getTopValue()){
minStack.pop();
}
return ret;
}

public int min(){
return minStack.getTopValue();
}

public static void main(String[]args)throws Exception{
MinStack stack=new MinStack(10);
stack.push(5);
System.out.println("min:"+stack.min());
stack.push(8);
stack.push(5);
stack.push(4);
stack.push(9);
System.out.println("min:"+stack.min());
stack.pop();
System.out.println("min:"+stack.min());
stack.pop();
System.out.println("min:"+stack.min());
stack.pop();
System.out.println("min:"+stack.min());
}

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