具体做法:

1、构建两个栈,用于实现查找栈的最小值;

2、栈stack1按正常压入元素;栈stack2用来实现获取栈的最小值:当stack2为空时,将元素压入栈;如果输入的元素大于stack2栈顶的元素,那么stack2就压入与栈顶相同的元素(因为此时栈中的最小元素依然是栈顶元素);当输入元素不大于栈顶元素时,将输入元素压入栈stack2,因为此时栈的最小元素发生了变化。

class Solution {
  private:
    stack<int> stack1;
    stack<int> stack2;
  public:
    void push(int value) {
        stack1.push(value);
        if (stack2.empty() || value <= stack2.top()) {
            stack2.push(value);
        } else {
            stack2.push(stack2.top());
        }
    }
    void pop() {
        stack1.pop();
        stack2.pop();
    }
    int top() {
        return stack1.top();
    }
    int min() {
        return stack2.top();
    }
};