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

C ++でプログラムを作成して、指定された整数の配列で最も頻度の高い要素を見つけます


サイズNの整数の配列があるとします。タスクは、指定された整数の配列に存在する最も頻繁な要素を見つけることです。たとえば、

入力-1

N = 8
A[ ] = {1,2,4,3,3,1,1,5}

出力

1

説明 −与えられた整数の配列で、最も多く現れる数は「1」です。したがって、出力は「1」です。

入力-2

N = 6
A[ ] = {1,4,4,4,1,1}

出力-a

1

出力-b

4

説明:指定された整数の配列で、最も出現する数は「1」と「4」です。したがって、出力をそれらのいずれかに返すことができます。

この問題を解決するためのアプローチ

指定された配列には複数の整数が含まれており、配列内に存在する最も頻繁な要素を見つける必要があります。線形時間O(n)と線形空間O(n)でこの問題を解決するために、ハッシュマップのアプローチを使用できます。

このアプローチでは、キーが要素であり、値が要素のオカレンスであるキーと値のペアで構成される順序付けられていないマップ(STLライブラリ)を作成します。マップをトラバースしているときに、番号の最大出現数を見つけて、その番号を出力として返します。

  • サイズNの配列を入力します。

  • 整数関数maxOccurrence(int A []、int size)は、配列とそのサイズを入力として受け取り、最大頻度で数値を返します。

  • キーを要素として、値を頻度として、配列のすべての要素のハッシュマップを作成します。

  • マップを繰り返し処理し、最も頻度の高い要素があるかどうかを確認して、結果を数値として返します。それ以外の場合、配列に数値が存在しない場合は、「-1」を返します。

#include<bits/stdc++.h>
using namespace std;
int maxOccurrence(int A[], int size){
   int mxcount=0;
   int res=-1;
   unordered_map<int,int>mp;
   for(int i=0;i<size;i++){
      mp[A[i]]++;
   }
   for(auto x:mp){
      if(x.second>mxcount){
         res= x.first;
         mxcount=x.second;
      }
   }
   return res;
}
int main(){
   int N=6;
   int A[N]= {1,4,4,4,2,1};
   int ans= maxOccurrence(A,N);
   cout<<ans<<endl;
   return 0;
}

出力

上記のコードを実行すると、出力は次のように出力されます。

4

4の頻度は3です。これは、指定された配列内の他のすべての数値からの最大頻度です。


  1. 最も頻繁な要素を見つけるためのC#プログラム

    文字列が-だとしましょう String s = "HeathLedger!"; 次に、新しいアレイを作成します。 int []cal = new int[maxCHARS]; 新しいメソッドを作成し、その中に文字列と新しい配列の両方を渡します。文字の最大出現回数を見つけます。 static void calculate(String s, int[] cal) {    for (int i = 0; i < s.Length; i++)    cal[s[i]]++; } 完全なコードを見てみましょう- 例 using

  2. Pythonの隠し配列で最も頻繁に使用される要素のインデックスを見つけるプログラム

    値0または1のみを含むことができるプライベート配列を含むTestArrayというクラスが与えられたとします。 2つのパブリックメンバー関数length()とquery()。関数length()は配列の長さを返し、関数query()は配列内のさまざまな値を比較する3つの異なる値を返します。この関数は、入力として4つの値p、q、r、sを取り、次のように機能します- 配列の指定されたインデックスの4つの値すべてが0または1の場合、4を返します。 それ以外の場合、配列の指定されたインデックスの3つの値が同じで、4番目の値が異なる場合、2を返します。 それ以外の場合、配列の指定されたイ