編寫一個C++程式,查詢整數陣列中出現頻率最高的K個元素。
假設我們有一個大小為N的整數陣列和一個鍵K。我們的任務是列印陣列中頻率最高的K個元素。例如:
輸入-1 −
N = 6 K = 2 arr[ ] = {1 ,1, 1, 2, 2, 3}
輸出 −
1 2
解釋 − 在給定的整數陣列中,頻率最高的K=2個元素是{1,2}。
輸入-2 −
N = 2 K = 1 arr[ ] = {1, 2}
輸出 −
1
解釋 − 在給定的整數陣列中,頻率最高的K=1個元素是{1}。
解決此問題的方法
在給定的整數陣列中,我們必須查詢並返回在給定陣列中重複次數最多的那些數字。鍵K表示我們必須在遍歷陣列時返回的陣列的前K個元素。
方法很簡單。我們將建立一個雜湊表,其中鍵為當前元素,值為該特定數字的出現次數。在對整個對映進行排序並找到每個元素的出現次數後,返回前K個最頻繁元素的輸出結果。
將N作為輸入以及N個元素的陣列。
一個函式`topKfrequent(int *arr, int k)`,它接收`arr[]`和鍵K作為輸入,並返回前K個最頻繁的元素。
建立一個所有元素及其出現次數的雜湊對映,作為鍵值對。
對雜湊對映中的所有值進行排序。
一個布林輔助函式幫助按值對對映進行排序,並按降序返回值。
迭代雜湊對映中的所有值,並返回給定陣列中前K個最頻繁的元素。
示例
#include<bits/stdc++.h> using namespace std; bool compare(pair<int,int>&a, pair<int,int>&b){ return a.second>b.second; } void topKfrequent(int arr,int n, int k){ unordered_map<int,int>mp; for(int i=0;i<n;i++){ mp[nums[i]]++; } vector<pair<int,int>>v(mp.begin(),mp.end()); sort(v.begin(),v.end(),compare); for(int i=0;i<k;i++){ cout<<v[i].first<< " "; } } int main(){ int N= 5; int arr[N]= {1,1,3,2,2}; int k=2; topKfrequent(arr,k); return 0; }
輸出
執行以上程式碼將生成以下輸出:
2 1
在給定的整數陣列中,前K=2個最頻繁的元素是2, 1。
廣告