题目大意:实现一个栈,具备push(),pop(),top()操作,还能够在O(1)的时间内得到栈中最小的元素。
算法思想:
用STL中的vector来实现栈的push,pop,top操作,同时用一个栈用来记录当前最小元素,则栈顶元素即为栈中最小元素。
代码如下:
class MinStack {
public:
void push(int x) {
if(s.size()==0&&min_value.size()==0)
min_value.push_back(x);
else
min_value.push_back(min(x,min_value.back()));
s.push_back(x);
}
void pop() {
if(s.size()==0&&min_value.size()==0)
return ;
s.pop_back();
min_value.pop_back();
}
int top() {
if(s.size()==0)
return -1;
return s.back();
}
int getMin() {
if(s.size()==0&&min_value.size()==0)
return -1;
return min_value.back();
}
private:
vector<int> s;
vector<int> min_value;
};