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

JavaScriptで配列内の各要素の出現回数が一意かどうかを判定する方法

本記事では、整数の配列を第1引数(唯一の引数)として受け取り、配列内に存在するすべての整数の出現回数が一意(ユニーク)であるかどうかを判定するJavaScript関数を作成します。

問題の概要

この関数は、配列内の各要素が出現する回数が互いに異なる場合には true を返し、同じ出現回数を持つ要素がひとつでも存在する場合には false を返す必要があります。

入力例

const arr = [7, 5, 5, 8, 2, 4, 7];

出力例

const output = false;

この場合の出力が false になる理由は、整数 7 と 5 の両方が2回ずつ出現しており、出現回数が重複しているためです。

解決のアプローチ

まずハッシュマップ(オブジェクト)を使って、各整数とその出現回数(頻度)を対応付けます。次に、そのマップをもとに一意な頻度だけを格納するSetを構築し、すでにSetに存在する頻度が見つかった時点で false を返します。最後まで重複がなければ true を返します。

この手法により、時間計算量 O(n)・空間計算量 O(n) で効率的に判定できます。

実装コード

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

const arr = [7, 5, 5, 8, 2, 4, 7];
const uniqueAppearances = (arr = []) => {
    const map = {};
    const set = new Set();
    for(let i = 0; i < arr.length; i++){
        const el = arr[i];
        map[el] = (map[el] || 0) + 1;
    };
    for(key in map){
        const value = map[key];
        if(set.has(value)){
            return false;
        };
        set.add(value);
    };
    return true;
};
console.log(uniqueAppearances(arr));

実行結果

コンソールへの出力は以下のとおりです。

false
  1. JavaScriptで複数の配列から要素を交互に取り出して1つの配列にまとめる方法

    問題 今回は、任意の個数の配列を引数として受け取り、それらすべての配列から要素を交互に(順番に一つずつ)取り出して、新しい配列を組み立てるJavaScript関数を作成します。 例えば、関数への入力が次のような場合を考えてみましょう。 入力 const arr1 = [1, 2, 3, 4]; const arr2 = [11, 12, 13, 14]; const arr3 = [a, b, c]; 出力 const output = [1, 11, a, 2, 12, b, 3, 13, c, 4, 14]; ご覧のとおり、まず各配列の先頭要素(1、11、a)、次に各配列の2番目の要素(

  2. JavaScriptで配列内の特定の数値に最も近い2つの要素を検索する方法

    問題の概要JavaScriptで、ソート済みの整数配列 arr を第一引数に、目標となる数値 target を第二引数に受け取る関数を作成します。この関数は、配列内に存在する要素の中から target に最も近い2つの数値を選び、それらを昇順に並べた配列として返す必要があります。例えば、以下のような入力が与えられた場合を考えてみましょう。入力:const arr = [1, 2, 3, 4, 5];const target = 3;出力:const output = [2, 3];この場合、target の値が 3 であるため、最も近い2つの要素は 2 と 3 となり、昇順に並べて [2, 3