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