LeetCode_283。ゼロを移動します

 

283移動ゼロ

イージー

アレイ与え  nums、すべての移動する機能を記述し  0、非ゼロの要素の相対的な順序を維持しながら、それの最後に」Sを。

例:

入力:[0,1,0,3,12]
出力:[1,3,12,0,0]

注意:

  1. あなたは、配列のコピーを作成することなく、その場でこれを行う必要があります。
  2. 操作の合計数を最小限にします。

 

パッケージ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)。
	} 
}

 

おすすめ

転載: www.cnblogs.com/denggelin/p/11776936.html