集合スタックのプログラマー面接の経典
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である.
コードは次のとおりです.
複数のスタックからなるデータ構造SetOfStacksを実装してください.各スタックのサイズはsizeで、現在のスタックが満たされている場合、新しいスタックが作成されます.このデータ構造は、通常のスタックと同じpushおよびpop動作をサポートする必要があります.
操作シーケンスint[][2]ope(C++はvector
テーマから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;
}