以入栈3 2 1 5 1为例,维护两个栈,分别是正常栈stk和栈顶时刻为最小元素的栈minstk,观察入栈过程中两个栈的变化。栈顶在右边。

入栈原则: 比较入栈元素和minstk栈顶元素,小的入minstk。


初始状态:
stk:
minstk:

入栈3:
stk:    3
minstk: 3

入栈2:
stk:    3 2
minstk: 3 2

入栈1:
stk:    3 2 1
minstk: 3 2 1

入栈5:
stk:    3 2 1 5
minstk: 3 2 1 1

入栈1:
stk:    3 2 1 5 1
minstk: 3 2 1 1 1


可以看出在整个入栈过程中,stk就是一个正常栈, minstk栈顶始终是stk的最小元素。
stk出栈时让minstk也出栈。



class Solution {
public:
    stack<int> st, minSt;
    void push(int v) {
        st.push(v);
		if (minSt.empty() || v < minSt.top())
		{
			minSt.push(v);
		}
		else
		{
			minSt.push(minSt.top());
		}
         
    }
    void pop() {
        st.pop();
        minSt.pop();
    }
	
    int top() {
        return  st.top();
    }
    int min() {
        return minSt.top();
    }
};

                                             ```