集合栈 牛客网 程序员面试金典 C++ Python
集合栈 牛客网 程序员面试金典 C++ Python
- 题目描述
- 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。
- 给定一个操作序列int[][2] ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个int[],为完成所有操作后的SetOfStacks,顺序应为从下到上,默认初始的SetOfStacks为空。保证数据合法。
C++
class SetOfStacks {
public:
//run: 5ms memory:496k
vector<vector<int>> setOfStacks(vector<vector<int>> ope, int size){
vector<vector<int>> ret;
int len = ope.size();
if(len == 0 || size <= 0) return ret;
vector<int> tmp;
for (int i = 0; i < len; i++){
if (ope[i][0] == 1){
if(tmp.size() == size){
ret.push_back(tmp);
tmp.clear();
}
tmp.push_back(ope[i][1]);
}else{
int retSize = ret.size();
int tmpSize = tmp.size();
if ((0 == retSize) && (tmpSize == 0))
int pass_and_do_nothing_may_you_can_print_something = 0;
else{
if(tmpSize == 0 ){
tmp = ret[retSize - 1];
ret.pop_back();
}
tmp.pop_back();
}
}
}
if (tmp.size()) ret.push_back(tmp);
return ret;
}
};
Python
class SetOfStacks:
#run:61ms memory:5712k
def setOfStacks(self, ope, size):
if size < 1: return None
if None == ope: return None
ret = []
lt = []
for i in range(len(ope)):
item = ope[i]
if item[0] == 1:
if len(lt) == size:
ret.append(lt)
lt = []
lt.append(item[1])
else:
if (len(ret) == 0 and len(lt) == 0):pass
else:
if len(lt) == 0:lt = ret.pop()
lt.pop()
ret.append(lt)
return ret