实现最小栈

Posted Alice_yufeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现最小栈相关的知识,希望对你有一定的参考价值。

class MinStack 
    private int min;
    private LinkedList<Integer> stack;
    public MinStack() 
        min = Integer.MAX_VALUE;
        stack = new LinkedList<>();
    
    
    public void push(int val) 
        //如果添加的值val小于之前记录的最小值min,就需要把min入栈,将最小值min的值更新为val
        //需要把min入栈的原因是,如果当前val出栈后,意味着最小值就出栈了,那么再出栈的元素就是新的最小值。
        /* 栈底---------->栈顶 (-2,0,-3依次入栈)
        * -2入栈,由于min的初始值为Integer.MAX_VALUE,栈的情况:MAX_VALUE, -2; min = -2
        * 0入栈, 0 > min 栈的情况:MAX_VALUE, -2, 0; min = -2
        * -3入栈,-3 < -2, 就得先将min入栈,再将-3入栈,栈的情况:MAX_VALUE, -2, 0,-2,-3;min = -3
        *
        * 此时-3出栈,-3 = min,-3出栈后就说明当前最小值-3已经无了,就得再将-2弹出,并更新最小值为-2,栈的情况:MAX_VALUE, -2, 0;min = -2 */
        if (val <= min) 
            stack.push(min);
            min = val;
        
        stack.push(val);
    
    
    public void pop() 
        //如果出栈元素等于记录的最小值,就说明最小值已经出栈了,那么紧接着这个出栈元素的下一个元素就是当前栈中最小值。
        if (stack.pop() == min)
            min = stack.pop();
    
    
    public int top() 
        return stack.peek();
    
    
    public int getMin() 
        return min;
    

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

以上是关于实现最小栈的主要内容,如果未能解决你的问题,请参考以下文章

用栈实现队列,用队列实现栈,最小栈,设计循环队列的Java做法

python实现时间o的最小栈

最小栈的实现和优化

左神算法之获取栈中最小值

实现一个栈,在基本功能的基础上,可以返回栈中最小值

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作