双栈法

  • 一个栈保证栈的先入后出,一个栈每次压栈最小值,保证min。
  • 同时压栈可以保证每个栈的元素个数相同,栈2的栈顶元素始终为当前元素的最小值的。
  • 避免开一个全局变量保存最小值,直接用栈顶元素作为当前最小值,同时考虑栈2为空的情况。
class Solution {
public:
    stack<int> s1;
    stack<int> s2;
    void push(int value) {
        s1.push(value);
        if(s2.empty()||s2.top()>value)
        {
            s2.push(value);
        }
        else{
            s2.push(s2.top());
        }
    }
    void pop() {
        if(s1.size())
        {
            s1.pop();
            s2.pop();
        }
    }
    int top() {

        return s1.top();

    }
    int min() {
         return s2.top();
    }
};