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();
        }
    }
}

1 声望1 粉丝

引用和评论

0 条评论