题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。

       构建一个数据结构,包含数据栈和辅助栈。数据栈存取数据,而辅助栈则存取最小值元素。每一次,数据栈push和pop操作,辅助栈也跟着push和pop操作,保存当前最小值元素。

代码实现:

import java.util.Stack;
import java.util.EmptyStackException;

public class Solution{
       Stack<Integer> dataStack=new Stack<Integer>();
       Stack<Integer> minStack=new Stack<Integer>();

       public void push(int value){
             if(minStack.empty()||value<minStack.peek()){
                   minStack.push(value);
             }else{
                   minStack.push(minStack.peek());
             }
             dataStack.push(value);
       }  

       public int pop(){
             if(dataStack.empty()){
                  throw new EmptyStackException();
             }
             minStack.pop();
             return dataStack.pop();
       }

       public int min(){
             if(dataStack.empty()){
                  throw new EmptyStackException();
             }
             return minStack.peek();
       }


       public static void main(String[] args){
            MinStack min=new MinStack();
            //min.pop();
            min.push(1);
            min.push(2);
            min.push(0);
            min.push(1);
            min.push(3);
            System.out.println(min.min());
            min.pop();
            System.out.println(min.min());
            min.pop();
            System.out.println(min.min());
            min.pop();
            System.out.println(min.min());
            min.pop();
            System.out.println(min.min());
            min.pop();
            System.out.println(min.min());      
       }
}

 

 posted on 2018-10-28 12:10  会飞的金鱼  阅读(107)  评论(0)    收藏  举报