347.前 K 个高频元素

学会了怎么构建和使用优先队列后这题就比较简单了。

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] ]++;
}
//比较函数返回true时,表示第一个参数应该排在第二个参数的前面。估计源码里STL队首是指向优先级最后。记住就行
auto cmp = [](const pair<int, int>& a, const pair<int,int>& b)
{
return a.second > b.second;
};
//构建并维护一个大小为k的小顶堆,频率最低的元素会在堆顶。
std::priority_queue< pair<int, int>, vector<pair<int, int>>, decltype(cmp)> pri_que(cmp);
for( auto it = map.begin(); it != map.end(); it++ )
{
pri_que.push( *it );
if(pri_que.size() > k)
{
pri_que.pop();
}
}
vector<int> result(k);
for(auto i = k - 1; i >= 0; i--)
{
result[i] = pri_que.top().first;
pri_que.pop();
}
return result;
}
};
posted @   名字好难想zzz  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示