题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
//用vec实现,默认vec[0]存放的是最小元
class Solution {
private:
vector<int> vec;
public:
Solution(){vec.resize(1);}
void push(int value) {
//size为1说明栈是空的,插入的就为最小元
if(vec.size()==1)
{
vec[0]=value;
vec.push_back(value);
}
else
{
//新插入的元素与最小元比较
if(vec[0]>value)
{
vec[0]=value;
vec.push_back(value);
}
else vec.push_back(value);
}
}
void pop() {
if(vec.size()==2)
{
vec.resize(1);
}
else{
//当size大于2时,找到第1到第size-2的最小元,若有vec[0]存在不再
//寻找,最小元依然是vec[0]
bool mark=false;
int min=vec[1];
for(int i=1;i<vec.size()-1;++i)
{
if(vec[i]<min)min=vec[i];
if(vec[i]==vec[0])
{
mark=true;
break;
}
}
if(mark==false)
{
vec[0]=min;
vec.resize(vec.size()-1);
}
else
{
vec.resize(vec.size()-1);
}
}
}
int top() {
return vec[vec.size()-1];
}
int min() {
return vec[0];
}
};