需求是在基本栈的功能上增加一个min的功能。

这里选择增加一个栈用于维护最小值,暂且称它为最小栈。

每次push时检查最小栈,为空则直接入最小栈,否则将入原始栈元素与栈顶元素比较,若入原始栈元素小于等于最小栈栈顶元素,则也将其入最小栈。之所以等于时也要入最小栈,是因为相等说明前面有一个同样数据的结点已经入原始栈,当原始栈执行pop操作时,若pop了其中一个最小值,那么最小栈中也会同样将其pop,而此时原始栈中还有一个和该值同样的值,所以最小值不应该改变。

每次pop时检查最小栈栈顶元素是否与pop的出的元素想等,想等则最小栈也pop。
top操作直接调用top即可。

每次min时直接返回最小栈栈顶元素。

class Solution {
public:
    void push(int value) {
        stk.push_back(value);
        if(mini.empty()){
            mini.push_back(value);
        }
        else{
            if(value <= mini.at(mini.size() - 1)){
                mini.push_back(value);
            }
        }
    }
    void pop() {
        int top = stk.at(stk.size() - 1);
        stk.pop_back();
        if(top == mini.at(mini.size() - 1)){
            mini.pop_back();
        }
    }
    int top() {
        return stk.at(stk.size() -1 );
    }
    int min() {
        return mini.at(mini.size() - 1);
    }
private:
    vector<int> stk;
    vector<int> mini;
};