Q21:包含min函数的栈

来源:互联网 发布:eviews非线性回归算法 编辑:程序博客网 时间:2024/06/03 19:55

importjava.util.Stack;

publicclass Q21 extendsStack{

   /**

    * 题目:包含min函数的栈

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

    * 解题思路:通过设置辅助栈来实现。当输入的值小于栈顶元素时,则进栈,辅助进栈;当输入的值大于栈顶时,进栈,辅助栈中仍然让栈顶元素重复一次入栈。取最小元素时从辅助栈中取值。

    */

   publicstatic void main(String[] args) {

      Q21 test=new Q21();

      test.push(3);

      test.push(2);

      test.push(1);

      test.push(4);

      test.push(5);

      System.out.println(test.min());

      System.out.println(test.pop());

   }

   private Stack<Integer>minStack = new Stack<Integer>();//辅助栈,记录最小值

   private Stack<Integer>valueStack = new Stack<Integer>();

   //实现入栈操作

   publicvoid push(Integer item){

      valueStack.push(item);

      if((minStack.isEmpty()) || (item <minStack.pop())){

         minStack.push(item);//当输入的值小于栈顶元素时,压入辅助栈

      }else{

         minStack.push(valueStack.pop());//当输入的值大于栈顶元素时,压入辅助栈的是辅助栈的栈顶。即:重新压入一次

      }

   }

   //实现出栈操作

   public Integer pop(){

      if((minStack.isEmpty()) || (valueStack.isEmpty())){

         returnnull;

      }

      minStack.pop();

      returnvalueStack.pop();

   }

   //取栈中最小值,取辅助栈的栈顶元素

   public Integer min(){

      if(minStack.isEmpty()){

         returnnull;

      }

      returnminStack.peek();//用于获取栈顶元素,但是仍然在栈顶中,不执行删除操作

   }

}

0 0
原创粉丝点击