1、思路
-
通过一个辅助栈
minstk
来存放栈中的最小值; -
每次
push
操作时,若新元素小于等于minstk
栈顶元素,则该元素同时进两个栈,否则只进普通的stk
栈; -
每次
pop
操作时,若stk
栈顶元素等于minstk
栈顶元素,则同时弹出两个栈顶元素,否则只弹出stk
栈顶元素。
2、代码
class MinStack {
private:
stack<int> stk;
stack<int> minStk;
public:
MinStack() {
}
void push(int x) {
if (minStk.empty() || x <= minStk.top())
{
minStk.push(x);
}
stk.push(x);
}
void pop() {
if (!stk.empty() && stk.top() == minStk.top())
{
minStk.pop();
}
if (!stk.empty()) stk.pop();
}
int top() {
return stk.top();
}
int getMin() {
return minStk.top();
}
};