編寫一個 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,這是給定陣列中所有其他數字中的最大頻率。

更新於: 2021 年 2 月 5 日

3K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告