155. 最小栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。

//建立两个栈,size不一样
class MinStack {
private:
    /** initialize your data structure here. */
    stack s1;
    stack s2;
public:   
    void push(int x) {
        s1.push(x);
        if (s2.empty() || x<=getMin()) s2.push(x);
    }
    
    void pop() {
        if (s1.top()==getMin()) s2.pop();
        s1.pop();   
    }
    
    int top() {
        return s1.top();
    }
    
    int getMin() {
        return s2.top();
    }
};
//只有一个栈
class MinStack {
private:
    /** initialize your data structure here. */
    stack s1;
    int min=INT_MAX;
public:   
    void push(int x) {
        if (x<=min) {//当前输入小于等于min时,多压一次min
            s1.push(min);
            min=x;
        }
        s1.push(x);
    }
    
    void pop() {
        int temp=s1.top();s1.pop();
        if (temp==min) {//当前top=min时,多弹一次上一次保存的min
            min=s1.top();
            s1.pop();
        }
    }
    int top() {
        return s1.top();
    }
    int getMin() {
        return min;
    }
};

你可能感兴趣的:(155. 最小栈)