队列和栈 第二题 注意考虑什么时候要更新最小值 简单

class Solution {
public:
    void push(int value) {
        // 压入的时候 发现小于原先最小的 就更新最小的值
        // 就是直接push
        if(value<minnum)
            minnum=value;
        a.push(value);
    }
    void pop() {
        // 先把要扔掉的扔掉
        // 判断要pop出去的是不是最小值
        int temp=a.top();
        a.pop();
        // pop出去的不是最小值 不用处理
        if(temp != minnum){
            return;
        }
        
        // pop出去的是最小值 此时 要去重新更新最小值
        // 因为栈的特性 如果想要遍历一遍 每个点都会被扔掉
        // 所以 在这里 需要另一个栈来临时保存结果
        // 遍历 找最小值 再把栈还原
        stack<int> b;
        temp=20000;
        while(!a.empty())
        {
            temp=a.top() < temp? a.top():temp;
            b.push(a.top());
            a.pop();
        }
        minnum = temp;
        while(!b.empty())
        {
            a.push(b.top());
            b.pop();
        }
    }
    int top() {
        // 只是输出栈顶的值 不会影响栈 无所谓
        return a.top();
    }
    int min() {
        // 只是输出最小的值 不会影响栈 无所谓
        return minnum;
    }
    stack<int> a;
    int minnum=20000;
};