题目:
算法思想: 常数时间能检索到最小元素,意味着我们需要一个额外的空间来维护最小元素,本文采用辅助数组。定义两个数组vector,一个用来保存元素,可以push和pop,top,另一个数组维护的是最小元素,数组的最后的位置保存的是当前栈中最小的元素,如果push的数小于等于最小元素,则添加到辅助数组中。
代码:
class MinStack {
public:
/** initialize your data structure here. */
vector<int> array;
vector<int> assist;
MinStack() {
}
void push(int x) {
array.push_back(x);
if(assist.size() == 0)
assist.push_back(x);
else if(assist[assist.size()-1] >= x)
assist.push_back(x);
}
void pop() {
if(array.size() == 0)
return;
int tmp = array[array.size()-1];
array.pop_back();
if(tmp == assist[assist.size()-1])
assist.pop_back();
}
int top() {
return array[array.size()-1];
}
int getMin() {
return assist[assist.size()-1];
}
};