以入栈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();
}
};
```