定义两个栈,栈1实现基本功能,栈2保存当前栈状态的最小值
压栈:压栈时若压入值小于栈2的栈顶,将改值压入栈2
出栈:出栈时若栈顶值等于栈2栈顶,栈2也随之出栈
当前栈的最小值即为栈2栈顶值

class Solution {
public:
    stack<int> stk, mm;
    void push(int value) {
        stk.push(value);
        if(mm.empty() || value < mm.top())
            mm.push(value);
    }
    void pop() {
        if(!stk.empty()){
            if(mm.top()==stk.top())
                mm.pop();
            stk.pop();
        }
    }
    int top() {
        if(stk.empty()) return 0;
        return stk.top();
    }
    int min() {
        if(stk.empty()) return 0;
        return mm.top();
    }
};