题解 | #集合栈#

集合栈

https://www.nowcoder.com/practice/69f0ffed01c741c5ae5594a23f7cd739

//该题目的难点是容易忽略边界情况下的操作(栈满时的入栈,栈空时的出栈)
class SetOfStacks {
public:
    vector<vector<int> > setOfStacks(vector<vector<int> > ope, int size) {
        // write code here
        vector<vector<int>> set;
        vector<int> s;
        for(int i=0; i<ope.size();i++){
            if(ope[i][0]==1){
                if(s.size()<size)
                        s.push_back(ope[i][1]);                   
                //栈未满,则入栈
                else{
                    set.push_back(s);
                    s.clear();
                    s.push_back(ope[i][1]); 
                }//栈满,将其加入集合,然后清空该栈(等同于创了个新栈)
            }
            else{
                if(s.size()>0){
                    s.pop_back();
                }//栈非空,出栈
                else{
                    if(!set.empty()){
                        s=set[set.size()-1];
                        set.pop_back();
                        s.pop_back();
                    }
                }//栈空,若集合非空,则获取上个存满的栈,将其出栈
            }
            
        }
        if(!s.empty()) set.push_back(s);//由于满了的栈才会加入集合,所以最后可能剩下没满的栈还没加入
        return set;
    }  
};

全部评论

相关推荐

专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
我见java多妩媚:大外包
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务