leecode第一百五十五题(最小栈)

class MinStack {
public:
    stack<int> cur_stack;
    stack<int> cur_min;//用来存储最小值的栈
    int min_num;
    
    MinStack() {//初始化
        this->min_num = INT_MAX;
    }

    void push(int x) {//压入栈,同时记录最小值
        if (x < this->min_num)
            this->min_num = x;

        cur_min.push(this->min_num);
        cur_stack.push(x);
    }

    void pop() {//弹出栈,删除的同时注意小心最小值的变化
        cur_min.pop();
        if (cur_min.empty())
            this->min_num = INT_MAX;
        else
            this->min_num = cur_min.top();
            
        cur_stack.pop();
    }

    int top() {//查看栈顶
        return cur_stack.top();
    }

    int getMin() {//当前最小值,等同于查看存储最小值的栈顶
        return cur_min.top();
    }
};

 分析:

嘿嘿,偷懒了,直接用了别人的栈,但是作用不一样啊,我这个能查看最小值。不然那就用两个队列实现栈了。

编程太渣了,第一时间没想起来,最小值随着栈的弹出也会变化。第二时间没想起来弹出之后最小值的阈值也会变。

原文地址:https://www.cnblogs.com/CJT-blog/p/10717843.html