您的位置:首页 > 其它

[算法学习]栈中的最小值

2016-02-18 13:51 141 查看
问题描述: 实现栈的pop、push、 min (得到栈中最小值)方法。


解法与分析:

1. 由于每次压栈和出栈都可能会改变栈中的最小值,所以,我们增加一个存放最小值的栈。

2. 当出栈操作时,最小值的栈也出栈;(当然,必须判断栈是否为空)

3. 当压栈操作时,比较压栈元素值和最小栈的栈顶元素的大小,若比较小,则将它压入栈中,若不是,则将最小栈的栈顶元素重复压栈。(当然,必须判断栈是否为空)

参考代码如下

[code]    private Stack<Integer> dataStack = new Stack<Integer>();
    private Stack<Integer> minStack = new Stack<Integer>();

    /**
     * 出栈
     * @return
     */
    public int pop()
    {
        if (minStack.isEmpty() && dataStack.isEmpty())
        {
            throw new EmptyStackException();
        }
        minStack.pop();
        return dataStack.pop();
    }

    /**
     * 压栈
     * @param item
     */
    public void push(int item)
    {
        dataStack.push(item);
        if(minStack.isEmpty()||item<minStack.peek())
        {
            minStack.push(item);
        }
        else
        {
            minStack.push(minStack.peek());
        }
    }

    /**
     * 取最小值
     * @return
     */
    public int min()
    {
        if(minStack.isEmpty())
        {
            throw new EmptyStackException();
        }
        return minStack.peek();
    }


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