编写一个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。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP