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());
}
}