编写一个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 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.