Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
思路:一个数组用来存值,一个数存最小值。注意:数组里存的是存入值与最小值的差,所以可能越界,要用long long类型保存差值。
class MinStack {
public:
void push(int x) {
if (val.empty()){
val.push_back(0);
min = x;
}
else{
val.push_back((long long)x - min);
if (x < min)
min = x;
}
}
void pop() {
if (!val.empty()){
int index = val.size() - 1;
if (val[index] < 0){
min -= val[index];
val.erase(val.begin()+index);
}
else{
val.erase(val.begin() + index);
}
}
}
int top() {
int index = val.size() - 1;
if (val[index] < 0)
return min;
else{
return min + val[index];
}
}
int getMin() {
if (!val.empty())
return min;
else
return -1;
}
private:
vector<long long> val;
int min;
};