集合栈 牛客网 程序员面试金典 C++ Python

集合栈 牛客网 程序员面试金典 C++ Python

  • 题目描述
  • 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。
  • 给定一个操作序列int[][2] ope(C++为vector&ltvector&ltint>>),每个操作的第一个数代表操作类型,若为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
原文地址:https://www.cnblogs.com/vercont/p/10210298.html