栈和队列——包含min函数的栈

实现一个特殊的栈, 在实现栈的基本功能的基础上, 再实现返
回栈中最小元素的操作。
【要求】
1. pop、 push、 getMin操作的时间复杂度都是O(1)。
2. 设计的栈类型可以使用现成的栈结构。

包含min函数的栈

自已以前的思路就是,每次getMin()函数时,就准备一个备用栈,将数据栈中的元素依次出栈到备用栈中,期间记录下最小元素,然后将备用栈中的元素依次弹回到数据栈中。

 

别人的思路,也是准备两个栈,一个数据栈dataStack,一个最小元素栈minStack,每次有元素入栈时,比较最小元素栈的栈顶peek,若小于,则将最小元素压入minStack中,否则将栈顶元素再次压入栈中

出栈时,左右两边 一起出栈。

 

package stackQueue;

import java.util.Stack;

/**
 * Created by Skye on 2018/4/5.
 */
public class StackOfMin {

    private Stack<Integer> dataStack;
    private Stack<Integer> minStack;

    public StackOfMin() {
        this.dataStack = new Stack<>();
        this.minStack = new Stack<>();
    }


    public void push(int num){
        if(minStack.empty() || minStack.peek() > num){
            minStack.push(num);
        }else{
            int min = minStack.peek();
            minStack.push(min);
        }
        dataStack.push(num);
    }

    public int pop(){
        if(dataStack.empty()){
            throw new RuntimeException( "stack is empty" );
        }
        minStack.pop();
        return dataStack.pop();
    }

    public int getMin(){
        if(minStack.empty()){
            throw new RuntimeException("stack is empty");
        }
        return minStack.peek();
    }
}

  

posted @ 2018-04-05 16:20  SkyeAngel  阅读(265)  评论(0编辑  收藏  举报