思路

每次插入删除都维护一个最小值,维护一个保存每一次插入后最小值的栈(辅助栈)

插入时

比较要插入的值和当前最小值,取二者的最小值作为新的最小值,将其插入辅助栈

弹出时

弹出辅助栈栈顶元素,将新的栈顶元素作为更新后的最小值

class Solution {
public:
    stack<int> normal, minval;
    int min_num = INT_MAX;        // 记录当前栈的最小值
    void push(int value) {
        normal.push(value);
        min_num = std::min(min_num, value);
        minval.push(min_num);

    }
    void pop() {
        normal.pop();
        minval.pop();
        min_num = minval.top();

    }
    int top() {
        return normal.top();

    }
    int min() {
        return min_num;
    }
};