概述
问题描述:
- 给定一个整数数组
nums
和一个整数k
,请返回其中出现频率前k
高的元素。- 可以按任意顺序返回答案。
核心思路:
- 该题需要用无序哈希表 + 优先队列来进行解题。
- 首先用哈希表记录数组中元素的频数。
- 记录完频数后将数值和频数存为
pair<int, int>
后存入优先队列中。【优先队列根据频数进行排序】 - 同时优先队列的大小需要固定为
k
,只要优先队列的大小大于k
则弹出顶部。
代码实现:
class Solution
{
public:
vector<int> topKFrequent(vector<int>& nums, int k)
{
unordered_map<int, int> mm;
for(int num : nums) ++mm[num];
using pii = pair<int, int>;
auto cmp = [&](const pii& a, const pii& b)
{
return a.second > b.second;
};
priority_queue<pii, vector<pii>, decltype(cmp)> pq(cmp);
for(auto& [num, cnt] : mm)
{
pq.emplace(num, cnt);
if(pq.size() > k) pq.pop();
}
vector<int> ans;
while(!pq.empty())
{
ans.emplace_back(pq.top().first);
pq.pop();
}
return ans;
}
};
最后
以上就是粗暴大神为你收集整理的【leetcode】【剑指offer Ⅱ】060. 出现频率最高的 k 个数字的全部内容,希望文章能够帮你解决【leetcode】【剑指offer Ⅱ】060. 出现频率最高的 k 个数字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复