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