需求是在基本栈的功能上增加一个min的功能。
这里选择增加一个栈用于维护最小值,暂且称它为最小栈。
每次push时检查最小栈,为空则直接入最小栈,否则将入原始栈元素与栈顶元素比较,若入原始栈元素小于等于最小栈栈顶元素,则也将其入最小栈。之所以等于时也要入最小栈,是因为相等说明前面有一个同样数据的结点已经入原始栈,当原始栈执行pop操作时,若pop了其中一个最小值,那么最小栈中也会同样将其pop,而此时原始栈中还有一个和该值同样的值,所以最小值不应该改变。
每次pop时检查最小栈栈顶元素是否与pop的出的元素想等,想等则最小栈也pop。
top操作直接调用top即可。
每次min时直接返回最小栈栈顶元素。
class Solution {
public:
void push(int value) {
stk.push_back(value);
if(mini.empty()){
mini.push_back(value);
}
else{
if(value <= mini.at(mini.size() - 1)){
mini.push_back(value);
}
}
}
void pop() {
int top = stk.at(stk.size() - 1);
stk.pop_back();
if(top == mini.at(mini.size() - 1)){
mini.pop_back();
}
}
int top() {
return stk.at(stk.size() -1 );
}
int min() {
return mini.at(mini.size() - 1);
}
private:
vector<int> stk;
vector<int> mini;
};