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

C++で配列内の数値の頻度(出現回数)を求める方法

配列に n 個の異なる要素が格納されているとします。この配列の中から、特定の要素が何回出現するか(頻度)を調べたい場合があります。

例えば、配列 A = [5, 12, 26, 5, 3, 4, 15, 5, 8, 4] の中で「5」の頻度を調べると、答えは 3 になります。

アルゴリズムの考え方

この問題は、次の手順で解くことができます。

1. 配列を左端から順に走査します。
2. 現在の要素が調べたい数値と一致したら、カウンターを1つ増やします。
3. 一致しない場合は、そのまま次の要素へ進みます。
4. 配列の最後まで走査したら、カウンターの値が頻度となります。

このアルゴリズムの計算量は O(n) で、配列の要素数に比例して処理時間が増加しますが、非常にシンプルで効率的な方法です。

サンプルコード

#include<iostream>
using namespace std;

int countElementInArr(int arr[], int n, int e) {
    int count = 0;
    for(int i = 0; i<n; i++){
        if(arr[i] == e)
            count++;
    }
    return count;
}

int main () {
    int arr[] = {5, 12, 26, 5, 3, 4, 15, 5, 8, 4};
    int n = sizeof(arr)/sizeof(arr[0]);
    int e = 5;
    cout << "Frequency of " << e << " in the array is: " << countElementInArr(arr, n, e);
}

実行結果

Frequency of 5 in the array is: 3

コードの解説

このプログラムでは、countElementInArr という関数が配列・要素数・調べたい値を受け取り、for ループで配列を1周して一致する要素の数を数えています。

また、sizeof(arr)/sizeof(arr[0]) を使うことで、配列の全体サイズを1要素分のサイズで割り、要素数 n を自動的に求めています。この手法により、配列の要素数が変わってもコードを修正する必要がありません。

なお、同じ配列内のすべての要素の頻度を一度に調べたい場合は、ハッシュマップ(unordered_map)を利用すると、O(n) の計算量で効率的に集計できます。

  1. C++で文字列の部分文字列の総数を求める方法を解説

    この記事では、与えられた文字列から作成できる空でない部分文字列の個数を求める方法について解説します。入力 : string = "moon" 出力 : 10 説明 : 部分文字列は m、o、o、n、mo、oo、on、moo、oon、moon の 10 個です。 入力 : string = "yellow" 出力 : 21解法のアプローチ文字列の長さを n とします。上の例からも分かるように、考えられるすべての部分文字列の個数を求めるには、長さ n、(n-1)、(n-2)、(n-3)、……2、1 の部分文字列の個数を順に加算していく必要があります。部分文

  2. C++で列車の停車駅の組み合わせ数を求める方法

    地点XとYの間にはn個の中間駅があるとします。ここで、「どの2つの停車駅も隣り合わない」という条件のもとで、s個の駅に停車する列車の配置方法が何通りあるかを求める問題を考えてみましょう。この記事では、停車駅の組み合わせ数を求めるためのアプローチを段階的に詳しく解説します。この問題は、本質的には組合せ論の問題であり、s個の停車駅の選び方の総数を求めることになります。 問題を解くアプローチ まず具体例として、中間駅が8個あり、そのうち3個の駅に停車させたい場合を考えてみます。 n = 8, s = 3 このとき、列車が停車できない駅は(n − s)、つまり5個残ることになります。 停車できない