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

ソート済み配列から一度だけ出現する最初の要素を見つける方法 - JavaScript

問題の概要

次のような、昇順にソートされた数値の配列があるとします。

const arr = [2, 2, 3, 3, 3, 5, 5, 6, 7, 8, 9];

この配列を受け取り、「一度だけ出現する最初の数値」を返すJavaScript関数を作成します。該当する数値が配列内に存在しない場合は、false を返します。

上記の配列の場合、期待される出力は 6 です。

解決策のコード例

以下がその実装コードです。

const arr = [2, 2, 3, 3, 3, 5, 5, 6, 7, 8, 9];
const firstNonDuplicate = arr => {
    let appeared = false;
    for(let i = 0; i < arr.length; i++){
        if(appeared){
            if(arr[i+1] !== arr[i]){
                appeared = false;
            };
        }else{
            if(arr[i+1] === arr[i]){
                appeared = true;
                continue;
            };
            return arr[i];
        };
    };
    return false;
};
console.log(firstNonDuplicate(arr));

コードの解説

このアルゴリズムは、配列がすでにソートされているという特徴を活かしています。同じ値は必ず隣接して並ぶため、隣り合う要素同士を比較するだけで重複を判定できます。

具体的には、ブール値の変数 appeared を使って「直前の要素が重複していたかどうか」を追跡します。

  • 隣接する要素が同じ場合は appearedtrue にして次へ進みます。
  • appearedtrue の状態で隣の要素と値が異なれば、重複グループが終わったことを意味するため、フラグをリセットします。
  • 重複していない要素に到達した時点で、その値を即座に返します。

ループが最後まで完了しても該当する要素が見つからなければ、false を返します。この方法なら配列を一度走査するだけで済むため、計算量は O(n) と非常に効率的です。

出力

コンソールには以下のように出力されます。

6
  1. JavaScriptで配列内の特定要素のインデックスを取得する方法【indexOf()の使い方を解説】

    JavaScriptで配列の中から特定の要素が何番目に存在するか(インデックス)を調べたい場面はよくあります。そんなときに便利なのが、indexOf()メソッドです。この記事では、indexOf()の基本的な使い方から、検索開始位置を指定する応用テクニックまで、サンプルコード付きでわかりやすく解説します。 indexOf()メソッドとは indexOf()メソッドは、配列内から指定した要素を先頭から順に検索し、その要素が最初に見つかった位置(インデックス)を返します。インデックスは0から始まることに注意してください。 もし要素が配列内に存在しない場合は、-1が返されます。これを利用すれば、要素

  2. JavaScript配列で要素を検索する方法を徹底解説!find()メソッドの使い方

    JavaScriptで配列の中から特定の要素を検索したい場面は非常に多くあります。本記事では、最もよく使われるfind()メソッドを中心に、実際に動作するサンプルコードとともに分かりやすく解説します。 find()メソッドとは find()メソッドは、配列の各要素に対して指定したテスト関数(コールバック関数)を実行し、条件を満たした最初の要素の値を返します。条件に一致する要素が存在しない場合は undefined を返します。 基本構文 arr.find(callback(element[, index[, array]])[, thisArg]) callback: 各要素をテストする関数