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

力扣347:前K个高频元素

力扣347:前K个高频元素

  • 题目
  • 思路
  • 代码

题目

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

思路

首先我们想到使用哈希表来存储每个元素的出现的次数,其次要对出现的次数进行比较很容易就能想到各种各样的排序方法,但是使用排序方法的话只要出现数组里的元素一多就有可能达到O(N)的时间复杂度。毕竟我们只要前K个高频元素,那么我们是否可以使用堆呢也就是小顶堆,小顶堆又完成了排序的工作又可以只保留前K个元素即设置堆的容量为K。
有了思路就很好写了,我们可以手撕一个小顶堆也可以使用优先队列来完成因为优先队列就是由大小顶堆为底层的。

代码

class Solution {
public://小顶堆// >号为小顶堆 <号为大顶堆static bool cmp(pair<int, int> m, pair<int, int> n) {return m.second > n.second;}vector<int> topKFrequent(vector<int>& nums, int k) {//哈希表unordered_map<int, int> mp;// 小顶堆priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(&cmp)> q(cmp);//统计并存储各元素的出现次数for (auto& ch : nums) {mp[ch]++;}for (auto& [num, count] : mp) {//如果优先队列的大小等于k了我们就需要判断//当前值出现次数和堆顶出现次数if (q.size() == k) {// 如果堆顶的出现次数小于当前出现次数// 说明我们需要pop一个再将当前值插入了if (q.top().second < count) {q.pop();q.emplace(num, count);}} else {//如果小于k那就直接插入q.emplace(num, count);}}vector<int> res;while(!q.empty()){res.push_back(q.top().first);q.pop();}return res;}
};
http://www.lryc.cn/news/592229.html

相关文章:

  • [AI8051U入门第五步]modbus_RTU主机
  • 《Python Web 框架深度剖析:Django、Flask 与 FastAPI 的选择之道》
  • 数据库防止数组字符串序列化
  • Python暑期学习笔记5
  • C++编程学习(第10天)
  • 近期遇到的问题汇总
  • 微信小程序商品结算功能
  • 【嵌入式硬件实例】-555定时器实现LED追逐效果
  • 后端参数校验
  • LP-MSPM0G3507学习--05管脚中断
  • 网络基础12--可靠性概述及要求
  • postman接口测试,1个参数有好几个值的时候如何测试比较简单快速?
  • Leetcode 04 java
  • 今日行情明日机会——20250718
  • 【Spring WebFlux】什么是响应式编程
  • Linux入门篇学习——借助 U 盘或 TF 卡拷贝程序到开发板上
  • 证券行业 SCRM 落地:企业微信与系统协同的合规技术方案
  • 二进制写入与文本写入的本质区别:系统视角下的文件操作
  • 数据结构:顺序表和链表
  • 【PTA数据结构 | C语言版】我爱背单词
  • 【PTA数据结构 | C语言版】二叉堆的朴素建堆操作
  • HTML 页面禁止缩放功能
  • 深入解析文本分类技术全景:从特征提取到深度学习架构
  • 数据库的基础概操作
  • 计算机视觉与机器视觉
  • 基于物联网的智能农情监测预警系统
  • 深入解析PyQt5信号与槽的高级玩法:解锁GUI开发新姿势
  • Maven学习总结(62)—— Maven 打包瘦身和提速解决方案
  • 电网驱鸟黑科技:鸟类AI识别算法+无人机实现“智慧护线“
  • 在ajax中什么时候需要将返回值类型做转换