JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptアルゴリズム:popメソッドだけで配列から負の値を削除する

複数の値を持つ配列X(例:[-3, 5, 1, 3, 2, 10])が与えられたとき、配列内の負の値をすべて取り除く関数を作成します。

関数の実行後には、配列が正の数だけで構成されている必要があります。さらに、一時的な配列を新たに作成せずpop()メソッドのみを使って要素を削除することが求められます。

解決のアプローチ

この問題を解く鍵は「配列の末尾から処理する」ことです。まずwhileループで末尾に連なる負の値をすべてpop()で除去し、その後、配列を後ろから前へ向かって走査します。走査中に負の値を見つけたら、その位置へ配列の最後の要素(正であることが保証されています)を代入してからpop()すれば、一時配列なしで元の配列内だけで処理を完結できます。

  1. ステップ1: whileループで、配列の末尾が負である限りpop()を繰り返します。
  2. ステップ2: forループでインデックスを末尾から先頭へ逆順に走査します。
  3. ステップ3: 負の値を検出したら、その要素を末尾の正の値で上書きし、pop()で削除します。

サンプルコード

以下が実際のコードです。

function removeNegatives(x) {
  // 配列の末尾にある負の値をすべて削除
  while (x.length && x[x.length - 1] < 0) {
    x.pop();
  }
  // 末尾から先頭に向かって走査
  for (var i = x.length - 1; i >= 0; i--) {
    if (x[i] < 0) {
      // この要素を最後の要素(正であることが保証されている)で置き換える
      x[i] = x[x.length - 1];
      x.pop();
    }
  }
}

var x = [-3, 5, 1, 3, 2, 10];
removeNegatives(x);
console.log(x);

実行結果

コンソールには次の出力が表示されます。

[ 5, 1, 3, 2, 10 ]

このアルゴリズムのメリット

  • 追加メモリ不要: 新しい配列を生成せず元の配列を直接書き換えるため、メモリ効率に優れています。
  • 線形時間 O(n): 各要素を一度だけ確認し、削除は常にO(1)で動作するpop()で行うため高速です。
  • 順序が保持される: 後ろから処理するため、残った正の値同士の相対的な並び順は変わりません。
  1. 【初心者向け】JavaScriptのArray.from()メソッドの使い方を実例で解説

    JavaScript の Array.from() メソッドは、length プロパティを持つオブジェクト(配列風オブジェクト)や、文字列・Map・Set などの反復可能(イテラブル)なオブジェクトから、新しい Array オブジェクトを生成して返すためのメソッドです。元のオブジェクトは変更されず、常に新しい配列インスタンスが返されます。 基本構文 Array.from(obj, mapFunction, val) パラメータの説明 obj:配列へ変換したい対象のオブジェクト。配列風オブジェクト(length プロパティを持つもの)や反復可能なオブジェクトを指定します。 mapFunctio

  2. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g