zoukankan      html  css  js  c++  java
  • 集合栈 牛客网 程序员面试金典 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
  • 相关阅读:
    洛谷 PT2 First Step (ファーストステップ)
    Mask-D、绮梦与空谷幽兰
    僕らの手には何もないけど、
    魔都蹭课、观光、酱油记
    竞赛计划
    糖果
    点名
    数字对
    字符串哈希
    负环
  • 原文地址:https://www.cnblogs.com/vercont/p/10210298.html
Copyright © 2011-2022 走看看