题目描述
请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。
给定一个操作序列int[][2] ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个int[][](C++为vector<vector<int>>),为完成所有操作后的SetOfStacks,顺序应为从下到上,默认初始的SetOfStacks为空。保证数据合法。
//常规思路
class SetOfStacks {
public:
vector<vector<int> > setOfStacks(vector<vector<int> > ope, int size) {
vector<vector<int> >res;
vector<int>one;
if(ope.size()<=0||size<=0) return res;
for(int i=0;i<ope.size();++i)
{
if(ope[i][0]==1)//如果为1,进容器
{
if(one.size()<size)//如果临时容器不满,则直接进
one.push_back(ope[i][1]);
else{//如果满了,直接进大容器,并清空,推入此时数据
res.push_back(one);
one.clear();
one.push_back(ope[i][1]);
}
}
else{ //如果为出容器
if(one.size()>0)//如果临时容器不为空
one.pop_back();
if(one.size()==0&&res.size()>0)//如果临时容器为空
{
vector<int>back=res.back();//出大容器中的一个容器
one.swap(back);
res.pop_back();
}
}
}
if(one.size()>0)//如果临时容器不为空,推入大容器
res.push_back(one);
return res;
}
};