设置一个辅助栈,与元素栈同步插入与删除;一开始向辅助栈中插入一个很大的值,在向元素栈中插入数据的同时,也向辅助栈中插入,但插入的是该元素与辅助栈中栈顶元素两者的较小值,这样就形成了一种一一对应的关系,出栈的时候,两个栈一同出,任意一个时刻,栈内元素的最小值就存储在辅助栈的栈顶元素中。
//两个栈是一一对应的,每个元素在辅助栈中对应的都是此时栈中最小的元素值
class MinStack{
private:
stack<int> x_stack;
stack<int> min_stack;//辅助栈
public:
MinStack() {
min_stack.push(INT_MAX);
}
void push(int val) {//和辅助栈一起入
x_stack.push(val);
min_stack.push(min(val,min_stack.top()));
}
void pop() {//和辅助栈一起出
x_stack.pop();
min_stack.pop();
}
int top() {
return x_stack.top();
}
int getMin() {
return min_stack.top();
}
};