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

JavaScriptで配列内の奇数回出現する要素を見つける方法

整数の配列が与えられたとき、その中で奇数回だけ出現する要素を1つ見つける関数を作成する必要があります。この問題では、奇数回出現する整数は必ず1つだけ存在することが保証されています。

解決のアプローチ

この問題は、まず配列をソートするというシンプルな戦略で解くことができます。配列を昇順に並べ替えると、同じ値を持つ要素が隣り合って並ぶようになります。そのため、その後配列を先頭から走査しながら連続する同一値の出現回数をカウントし、奇数回出現している要素を特定できます。

アルゴリズムの流れ

  1. 配列を数値として正しくソートする(比較関数 (a, b) => a - b を指定)
  2. 現在の要素が直前の要素と同じ場合は、カウントを1増やして次へ進む
  3. 別の値に切り替わったタイミングで、直前の値の出現回数が奇数であればそれを返す
  4. ループが完了しても返せていない場合は、最後に追跡していた値を返す

なお、JavaScript の sort() メソッドはデフォルトでは要素を文字列として比較するため、数値の大小関係を保つには必ず数値用の比較関数を渡す点に注意してください。

コード例

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

const arr = [20, 1, -1, 2, -2, 3, 3, 5, 5, 1, 2, 4, 20, 4, -1, -2, 5];
const findOdd = arr => {
    let count = 0;
    let last;
    arr.sort((a, b) => a - b);
    for (let i = 0; i < arr.length; i++){
        if (arr[i] === last) {
            count++;
            continue;
        };
        if(count % 2){
            return last;
        };
        last = arr[i];
        count = 1;
    };
    return last;
};
console.log(findOdd(arr));

実行結果

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

この入力配列の場合、5 だけが3回(奇数回)出現しており、他のすべての値は2回ずつ現れるため、結果として 5 が返されます。

5
  1. JavaScriptの配列から奇偶が異なる唯一の要素を返す方法

    問題の概要整数の配列 arr を第1引数(かつ唯一の引数)として受け取るJavaScript関数を作成します。この配列には、「すべて偶数+奇数が1個だけ」または「すべて奇数+偶数が1個だけ」という特徴があります。関数の役割は、その中で唯一ほかと性質が異なる要素を見つけ出し、それを返すことです。たとえば、次のような入力が与えられた場合を考えてみましょう。入力const arr = [5, 9, 7, 11, 34, 23, 77];出力const output = 34;出力の解説この配列はほぼすべて奇数で構成されていますが、34 だけが偶数です。したがって、返すべき値は 34 となります。実装

  2. 配列内で奇数回出現する数値を見つけるC/C++プログラム

    正の整数からなる配列の中で、奇数回出現する数値を見つけるC++プログラムを紹介します。この配列では、答えとなる1つの数だけが奇数回出現し、それ以外のすべての数値は偶数回出現するものとします。 入力: arr[] = {5, 7, 8, 8, 5, 8, 8, 7, 7} 出力: 7 アルゴリズムの解説 この方法では、二重ループを使用します。外側のループで配列の各要素を1つずつ順番に走査し、内側のループでその要素が配列全体に出現する回数をカウントします。カウントした結果が奇数であれば、その要素が求める答えとなります。 上記の例では、数値「5」は2回、「8」は4回出現していますが、「7」だけが3