編寫一個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。

更新於:2021年2月5日

956 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告