当前位置: 首页 > news >正文

LeetCode:347. 前 K 个高频元素

给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。

这道题第一眼,是典型的topK问题,第一想法就是堆,所以选择先用哈希表记录每个数出现的次数,再放进堆里找前K个

struct cmp{ bool operator()(pair<int,int>a,pair<int,int>b){ return a.second<b.second; } }; class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int>ump; vector<int>ans; for(auto c:nums){ ump[c]++; } priority_queue<pair<int,int>,vector<pair<int,int>>,cmp>q; for(auto c:ump){ q.push(c); } while(k--){ ans.push_back(q.top().first); q.pop(); } return ans; } };

这是我写的第一版代码,时间复杂度是nlogn,首先要手写比较器,增加代码的复杂度,而且建堆和维护都可以优化,从而优化时间复杂度

class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int>ump; vector<int>ans; for(auto c:nums){ ump[c]++; } priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q; for(auto [key,value]:ump){ q.push({value,key}); if(q.size()>k)q.pop(); } while(!q.empty()){ ans.push_back(q.top().second); q.pop(); } return ans; } };

这是第二版代码,只维护一个小跟堆,并且只维护K的大小的堆,少了很多维护堆的消耗,也让时间复杂度优化到nlogk

class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int>ump; int max_cnt=0; for(auto c:nums){ ump[c]++; max_cnt=max(max_cnt,ump[c]); } vector<vector<int>>bucket(max_cnt+1); for(auto [x,c]:ump){ bucket[c].push_back(x); } vector<int>ans; for(int i=max_cnt;ans.size()<k;i--){ ans.insert(ans.end(),bucket[i].begin(),bucket[i].end()); } return ans; } };

最后这个代码是使用桶排序,通过出现次数来分桶,相同出现次数会被分到一个桶,当ans.size()等于k的时候就会跳出结束,桶排序将时间复杂度降低到n,是这道题的最优解

http://www.jsqmd.com/news/1093414/

相关文章:

  • Home Assistant Voice 应该本地跑还是接云?本地语音链路该怎么判断
  • M3DM 总览:三大模块的数据流
  • python之类和对象
  • Gliding Horse 的 L2 作战地图:让多 Agent 协作从“摸黑”变成“透明”
  • 具身智能2.0时代洗牌局:2026国内头部具身企业第一梯队为何是“宇树、智元、越疆”?
  • 暗黑3终极自动化战斗宏:D3KeyHelper技术解析与实战应用
  • STC8H单片机IAP串口升级实战:告别冷启动,实现远程程序更新
  • 【单片机毕业设计】基于 STM32 的智能感应开盖垃圾桶设计,基于单片机的溢满检测自动垃圾桶控制系统(013101)
  • 应用场景与方案优势
  • 告别会议低效:智能会议系统的本地化部署方案
  • Java毕设项目:基于 SpringBoot+Vue 的网络域名管理系统设计与实现 前后端分离架构下 Web 域名运维管理平台 (源码+文档,讲解、调试运行,定制等)
  • tensorRT整个系列的总结(包括量化,减枝)
  • 立个flag。周四发表一篇文章。
  • Python变量作用域全解析:从局部到全局,彻底掌握LEGB规则
  • 无需备份即可从 iPhone 恢复已删除短信的 4 种方法
  • 智慧安防行业物联网技术与方案指南:从监控到应急响应的全方位解决方案
  • 【RISC-V】解决WSL2命令行总是出现bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)的问题
  • 【计算机毕业设计案例】网络域名资源分配与统筹管理系统设计 信息化视角下域名生命周期管理系统设计(程序+文档+讲解+定制)
  • Android 开发问题:Invalid <color> for given resource value.
  • Shopify分销系统搭建指南:适合初创团队的低成本增长方案
  • 我用 Claude Code 做 Code Review 两个月,Bug 漏检率从 41% 降到 11%
  • 服装收银系统究竟哪个好?最后我选了这个
  • 别再混着说了:2026 AI Agent 技术栈分层(tool / Skill / MCP / A2A / Context Harness Engineering)
  • Codex Agent Legion 实现原理与 GitHub 使用指南
  • 剪流AI员工手机数据安全架构解析:企业客户资料是否存在泄露风险?
  • 墨香情手游全域自由轻功,无束缚飞檐走壁闯江湖
  • .Net如何在AgentFramework中给AI智能体给AI添加执行python脚本和运行代码的能力后——后续可用于对接openClaw技能
  • Mybatis基础操作
  • Rust的async函数中的await点优化与编译器在状态机生成中的转换
  • 各类幕墙验收时应提供的资料