用C++编写一个程序,找出整数数组中出现频率最高的K个元素
假设我们有一个大小为 N 的整数数组和一个键 K。我们的任务是打印数组中最常见的前 K 个元素。例如,
输入 1 -
N = 6K = 2
arr[ ] = {1 ,1, 1, 2, 2, 3}
输出-
1 2
说明- 在给定的整数数组中,在数组中频率最高的前 K=2 个元素是 {1,2}。
输入 2 -
N = 2K = 1
arr[ ] = {1, 2}
输出-
1
说明- 在给定的整数数组中,在数组中频率最高的前 K=1 个元素是 {1}。
解决这个问题的方法
在给定的整数数组中,我们必须找到并返回那些在给定数组中大部分时间重复的数字。键 K 显示数组的顶部 K 元素,我们在遍历数组时必须返回该元素。
方法很简单。我们将创建一个哈希表,其中一个键作为当前元素,一个值作为该特定数字的出现。在对整个映射进行排序并找到每个元素的出现次数后,返回前 K 个最频繁元素的输出结果。
以 N 作为输入和 N 个元素的数组。
一个函数 topKfrequent(int *arr, int k) 以 arr[ ] 和键 K 作为输入并返回前 K 个频繁元素。
创建所有元素及其出现的哈希图作为键和对。
对哈希图中的所有值进行排序。
bool 辅助函数有助于按值对映射进行排序并按降序返回值。
迭代哈希图中的所有值并返回给定数组中前 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。
以上是 用C++编写一个程序,找出整数数组中出现频率最高的K个元素 的全部内容, 来源链接: utcz.com/z/338840.html