347.前 K 个高频元素
1.二分查找2.移除元素3.有序数组的平方4.41.缺失的第一个正数5.206翻转链表6.24 两两交换链表中的节点7.59螺旋数组8.19删除链表的倒数第n个结点9.160链表相交10.142环形链表11.242有效的字母异位词 349. 两个数组的交集 202快乐数12.1两数之和13.454 四数相加14.383 赎金信15.15三数之和16.18四数之和17.344 反转字符串 541反转字符串II18.代码随心录 54替换数字19.151反转字符串中的单词20.右旋字符串21.232.用栈实现队列 and 225用队列实现栈22.459.重复的子字符串23.28. 实现 strStr()24.20 有效的括号25.1047. 删除字符串中的所有相邻重复项26.150. 逆波兰表达式求值27.239 滑动窗口最大值
28.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; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现