283移動ゼロ
イージー
アレイ与え nums
、すべての移動する機能を記述し 0
、非ゼロの要素の相対的な順序を維持しながら、それの最後に」Sを。
例:
入力:[0,1,0,3,12]
出力:[1,3,12,0,0]
注意:
- あなたは、配列のコピーを作成することなく、その場でこれを行う必要があります。
- 操作の合計数を最小限にします。
パッケージleetcode.easy。 パブリッククラスMoveZeroes { 公共ボイドmoveZeroes1([] int型NUMS){ int型のn = nums.length。 //ゼロカウント = 0 numZeroesをint型。 {ため(; iがn <I ++は、I = 0 INT) IF(NUMS [I] == 0){ numZeroesを++。 } } //すべての非ゼロ要素を元の順序を保持してください。 java.util.ArrayListの<整数> ANS =新しいjava.util.ArrayListの<整数>(); 以下のために(INT i = 0; iがn <; iは++){ IF(NUMS [I]!= 0){ ans.add(NUMS [I])。 } } 最後までゼロを移動// (numZeroes> 0){ながら (0)ans.add。 numZeroes--; } //結果を結合 {(iは++; iがn <I = 0 INT)ため NUMS [I] = ans.get(I)。 } } 公共ボイドmoveZeroes2([] NUMSをINT){ int型lastNonZeroFoundAt = 0。 //現在の要素が0でない場合、我々はする必要がある だけで、私たちが発見最後の非0要素の前でそれを追加//。 以下のために(INT i = 0; iはnums.length <; iは++){ IF(NUMS [I]!= 0){ NUMS [lastNonZeroFoundAt ++] =のNUMS [I]。 } } //我々は新しい要素の処理が終了した後、 //すべての非ゼロ要素は、配列の先頭にいます。 //私達はちょうど0で、残りの配列を入力する必要があります。 以下のために(INT I = lastNonZeroFoundAt; iはnums.lengthを<; iは++){ NUMS [I] = 0; } print_arr(NUMS)。 } 公共ボイドmoveZeroes3(INT [] NUMS){ ため(INT lastNonZeroFoundAt = 0、CUR = 0; CUR <nums.length; ++ cur変換){ IF(NUMS [CUR]!= 0){ int型のTEMP = NUMS [lastNonZeroFoundAt]。 NUMS [lastNonZeroFoundAt] =のNUMS [CUR]。 NUMS [CUR] = TEMP。 lastNonZeroFoundAt ++; } } } プライベートボイドprint_arr(INT []配列){ {ため(iは++; iは<Array.lengthと、I = 0 INT) System.out.print([I] + "「配列); } のSystem.out.println(); } @ org.junit.Test 公共ボイドTEST1(){ INT [] NUMS = {0、1、0、3、12}。 } moveZeroes1(NUMS)。 print_arr(NUMS)。 @ org.junit.Test 公共ボイドTEST2は(){ [] int型NUMS = {0、1、0、3、12}。 print_arr(NUMS)。 moveZeroes2(NUMS)。 print_arr(NUMS)。 } @ org.junit.Test 公共ボイドTEST3(){ INT [] NUMS = {0、1、0、3、12}。 print_arr(NUMS)。 moveZeroes3(NUMS)。 print_arr(NUMS)。 } }