思路:利用两个栈来模拟实现,一个栈用来模拟入栈,出栈,另一个栈用来记录最小值。

class Solution{
public:
    void push(int value)
    {
        st.push(value);
        if(smin.empty())//smin为空,则将st的值入栈
        {
            smin.push(value);
        }
        if(smin.top()>value)//st入栈的值小于最小栈栈顶的值,将st入栈值push进smin,保持smin栈顶为最小值
        {
            smin.push(value);
        }
    }
    void pop()
    {
        if(st.top()==smin.top())//如果二者栈顶值相等,在st出栈前,将smin出栈,更新最小值
        {
            smin.pop();
        }
        st.pop();
    }
    int top()
    {
        return st.top();
    }
    int min()
    {
        return smin.top();
    }
private:
    stack<int> st;
    stack<int> smin;
};