题目
给你一个整数数组 nums
和一个整数 k
,请你返回其中出现频率前 k
高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2]示例 2:
输入: nums = [1], k = 1 输出: [1]
思路
这一题使用map就可以 key对应数组元素 value对应频率
然后使用小顶堆按照频率排序
代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <string>
#include <unordered_map>
using namespace std;
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); ++i)
{
map[nums[i]]++;
}
//定义一个小顶堆 按照频率排序
priority_queue < pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> ret;
unordered_map<int, int>::iterator iter = map.begin();
for (iter = map.begin(); iter != map.end(); iter++)
{
ret.push(make_pair(iter->second, iter->first));
if (ret.size() > k)
{
ret.pop();
}
}
vector<int> result(k);
for (int i = 0; i < k; ++i)
{
result[i] = ret.top().second;
ret.pop();
}
return result;
}
};