JavaScriptで配列内のすべてのゼロを末尾に移動する方法
問題概要
JavaScriptで、数値などのリテラルを含む配列を受け取る関数を作成することを考えます。この配列には、いくつかの0(ゼロ)が含まれている可能性があります。求められているのは、すべてのゼロを配列の末尾へ移動させると同時に、ゼロ以外の要素の相対的な順序は元のまま維持するという処理です。
解決策のコード例
以下がその実装コードです。
const arr = [5, 0, 1, 0, -3, 0, 4, 6];
const moveAllZero = (arr = []) => {
const res = [];
let currIndex = 0;
for(let i = 0; i < arr.length; i++){
const el = arr[i];
if(el === 0){
res.push(0);
}else{
res.splice(currIndex, undefined, el);
currIndex++;
}
}
return res;
};
console.log(moveAllZero(arr));
出力結果
上記のコードを実行すると、コンソールには次のような結果が出力されます。
[ 5, 1, -3, 4, 6, 0, 0, 0 ]
コードのポイント
- res.push(0):ゼロを見つけたら、そのまま新しい配列の末尾に追加します。
- res.splice(currIndex, undefined, el):ゼロ以外の要素は currIndex の位置に挿入されます。これにより、あとから push されたゼロよりも常に手前に配置され、元の相対的な順序が保たれます。
- currIndex++:ゼロ以外の要素を挿入するたびに、次の挿入位置へとインデックスを1つ進めます。
この処理により、非ゼロ要素である [5, 1, -3, 4, 6] が元の順序を保ったまま先頭側に並び、そのあとにゼロが3つ続く配列が完成します。
-
C++で配列内のすべてのゼロを末尾に移動する方法
複数のゼロ(0)を含む配列が与えられたとき、すべてのゼロを配列の末尾に移動させる必要があります。それ以外の要素は元の順序を保ったまま前に詰めます。具体例を見てみましょう。入力arr = [4, 5, 0, 3, 2, 0, 0, 0, 5, 0, 1]出力4 5 3 2 5 1 0 0 0 0 0アルゴリズム配列を初期化します。書き込み位置を示すインデックス変数を 0 で初期化します。与えられた配列を先頭から順に走査します。現在の要素がゼロでない場合、その値をインデックスの位置に書き込みます。その後、インデックスを1つ進めます。上記の処理が終わったインデックスから配列の長さ n まで繰り返すル
-
Pythonのリスト内包表記でリスト内のすべての0を末尾に移動する方法
Pythonでは、リスト内包表記を使うことで、数値リスト内のすべての0(ゼロ)をリストの末尾に移動できます。例えば、[1, 3, 0, 4, 0, 5, 6, 0, 7] というリストの場合、処理後の結果は [1, 3, 4, 5, 6, 7, 0, 0, 0] となります。 リスト内包表記を活用すれば、この処理はわずか1行のコードで実現可能です。以下の手順に従って実装してみましょう。 処理の手順 数値のリストを初期化します。 リスト内包表記で「0以外の要素」と「0の要素」をそれぞれ抽出し、両者を連結して新しいリストを作成します。 新しいリストを出力して結果を確認します。 サンプルコード