155. 最小栈

2019-08-10  本文已影响0人  HamletSunS

思路:
每次往栈中压入两个元素,1个是实际要入栈的元素,1个是当前栈中的最小元素。这样是为了方便迅速查找到当前栈中的最小元素

设计:
入栈 先判空,若是,那么最小元素min与第一个元素el相等,连续入栈2个el;若不是,先top()看一下未入栈时的最小元素min,再入栈el,最后入栈最小元素(通过比较min和新入栈的el来决定)

出栈 先判空,若非空,则连续出2个元素(第一个是min,第二个是el)

取最小值 直接st.top(注意st与自己的栈是两回事)

top 先判空。。。先保存min,出栈,top看el,然后把min入栈

class MinStack {
public:
    /** initialize your data structure here. */
    MinStack() {
        
    }
    
    void push(int x) {
        if(st.empty()){            
            st.push(x);
            st.push(x);
        }
        else{
            int min=st.top();
            st.push(x);
            if(x<min)
                st.push(x);              
                
            else
                st.push(min);
        }
    }
    
    void pop() {
        if(!st.empty()){
            st.pop();
            st.pop();
        }      
        
    }
    
    int top() {
        int min=st.top();
        st.pop();
        int ret=st.top();
        st.push(min);
        return ret;
    }
    
    int getMin() {
        return st.top();
    }
private: 
    stack<int> st;
  
};
上一篇 下一篇

猜你喜欢

热点阅读