集合スタックのプログラマー面接の経典

1720 ワード

タイトルの説明
複数のスタックからなるデータ構造SetOfStacksを実装してください.各スタックのサイズはsizeで、現在のスタックが満たされている場合、新しいスタックが作成されます.このデータ構造は、通常のスタックと同じpushおよびpop動作をサポートする必要があります.
操作シーケンスint[][2]ope(C++はvector)が与えられ、各操作の最初の数は操作タイプを表し、1であればpush操作、後の数はpushに対応する数字である.2であればpop操作であり,後の数は意味がない.すべての操作を完了したSetOfStacksの順序は下から上で、デフォルトの初期のSetOfStacksは空です.データの合法性を保証する.
テーマからA[][0]==1の場合はpush圧桟、A[][0]==2の場合はpop出桟、A[][2]の大きさは2である.
コードは次のとおりです.
public ArrayList<ArrayList<Integer>> setOfStacks(int[][] ope, int size) {
         ArrayList<ArrayList<Integer>> setofStacks =new ArrayList<ArrayList<Integer>>();
         ArrayList<Integer> inner =new ArrayList<Integer>();
         setofStacks.add(inner);
         for(int i=0;i<ope.length;i++){
        inner =setofStacks.get(setofStacks.size()-1);
        if(ope[i][0]==1){//  push
        if(inner.size()<size){//              
        inner.add(ope[i][1]);
        }else{
        inner =new ArrayList<Integer>();
        inner.add(ope[i][1]);
        setofStacks.add(inner);
        }
        }
        if(ope[i][0]==2){//  pop  
        //          
        if(setofStacks.get(0).size()==0)
        continue;//                ,  continue
        //                     
        if(inner.size()==0){
        //    inner.size()==0    setofStacks.get(0).size()==0       0;
        //   0  i++;         if    ,        
        //         
        setofStacks.remove(setofStacks.size()-1);
        //            
        inner =setofStacks.get(setofStacks.size()-1);
        }
        //    pop    
        inner.remove(inner.size()-1);
        }
         }
         return setofStacks;
}