JavaScriptで配列内の奇数回出現する要素を見つける方法
整数の配列が与えられたとき、その中で「奇数回だけ出現している」唯一の要素を見つける関数を作成してみましょう。
この問題では、奇数回出現する整数は必ず1つだけ存在することが保証されています。ここでは配列をソートしてから走査するというシンプルなアプローチで解決します。配列を昇順に並べ替えると、同じ値どうしが連続して並ぶため、隣接する要素を比較しながら出現回数をカウントすれば、奇数回出現している要素を効率よく特定できます。
アルゴリズムの流れ
sort((a, b) => a - b)で配列を数値として昇順ソートする- 前の値(
last)と現在の値を比較し、同じならカウント(count)を増やす - 値が切り替わったタイミングでカウントが奇数か判定し、奇数であれば直前の値を返す
コード例
実際のコードは以下のとおりです。
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
処理のポイント
この例では、ソート後の配列は [-2, -2, -1, -1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 20, 20] となります。5 だけが3回出現しており、それ以外はすべて偶数回(2回)出現しているため、ループの途中で count % 2 の判定により 5 が返される仕組みです。
-
JavaScriptのNumber()関数とは?使い方とサンプルコードを解説
JavaScriptのNumber()関数は、引数として渡された値やオブジェクトを、それに対応する数値へ変換するための関数です。真偽値や文字列型の数字、さらにはDateオブジェクトなども数値に変換できるため、データ型の変換処理において非常に便利な組み込み関数の一つです。例えば、Number(true)は「1」、Number(false)は「0」を返します。また、数字のみで構成された文字列「149」を渡せば数値の149に変換され、new Date()で生成した日付オブジェクトを渡すと、1970年1月1日からの経過ミリ秒数が返されます。以下に、Number()関数の動作を確認できるサンプルコードを
-
JavaScriptで数字パターンを表示する方法【初心者向けサンプルコード】
本記事では、テキスト入力欄とボタンを備えたJavaScript・HTMLプログラムの作成方法を解説します。ユーザーが入力欄に任意の数値(例:5)を入力してボタンをクリックすると、画面に以下のような数字パターンが表示される仕組みです。(n = 5 の場合の出力例)01 01 02 01 02 03 01 02 03 04 01 02 03 04 05仕組みのポイントこのパターンは二重ループ(ネストしたforループ)を使うことで実現できます。外側のループが「行」を制御し、内側のループがその行に表示する「数字の個数」を制御します。i 行目には 1 から i までの数字が順番に出力されるため、行が進む