刷题7:最小栈

Posted

tags:

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

Leetcode:155. 最小栈

方法1:

关键点:定义两个栈st和stMin,st存放所有元素,stMin存放最小值。

压入:

即将入栈的元素如果val<stMin.peek(),则将val压入stMin,如果val>=stMin.peek(),将stMin栈顶元素再次压入stMin,无论什么情况都要把val压入st。

弹出:

st和stMin分别弹出元素即可。

class MinStack {
    Stack<Integer> st;
    Stack<Integer> stMin;
    /** initialize your data structure here. */
    public MinStack() {
        st = new Stack<Integer>();
        stMin = new Stack<Integer>();
    }
    
    public void push(int val) {
        st.push(val);
        if(stMin.isEmpty()){
            stMin.push(val);
        }else if(val < getMin()){
            stMin.push(val);
        }else{
            stMin.push(stMin.peek());
        }
    }
    
    public void pop() {
        if(st.isEmpty()){
            return;
        }else{
            st.pop();
            stMin.pop();
        }
    }
    
    public int top() {
        if(st.isEmpty()){
            return -1;
        }else{
            return st.peek();
        }
    }
    
    public int getMin() {
        if(stMin.isEmpty()){
            return -1;
        }else{
            return stMin.peek();
        }
    }
}

方法2:

1.压栈

如果stMin是空的,则将val压入stMin;如果stMin不为空且val<=stMin.peek(),也将val压入栈中。st无论哪种情况都压入val。

2.出栈

st栈无论哪种情况都把元素弹出。如果st弹出的值等于stMin的栈顶元素时,stMin.pop()把栈顶元素弹出。

class MinStack {
    Stack<Integer> st;
    Stack<Integer> stMin;
    /** initialize your data structure here. */
    public MinStack() {
        st = new Stack<Integer>();
        stMin = new Stack<Integer>();
    }
    
    public void push(int val) {
        st.push(val);
        if(stMin.isEmpty()){
            stMin.push(val);
        }else if(val <= getMin()){
            stMin.push(val);
        }
    }
    
    public void pop() {
        if(st.isEmpty()){
            return;
        }else{
            if(getMin() == st.peek()){
                stMin.pop();
            }
            st.pop();
        }
    }
    
    public int top() {
        if(st.isEmpty()){
            return -1;
        }else{
            return st.peek();
        }
    }
    
    public int getMin() {
        if(stMin.isEmpty()){
            return -1;
        }else{
            return stMin.peek();
        }
    }
}

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

2021/5/16 刷题笔记最小栈与辅助栈思想

LeetCode刷题笔记-数据结构-day14

LeetCode刷题笔记-数据结构-day14

LeetCode刷题155-简单-最小栈

[JavaScript 刷题] 栈 - 最小栈, leetcode 155

[JavaScript 刷题] 栈 - 最小栈, leetcode 155