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

(堆)347. 前 K 个高频元素

题目

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

示例 1:

输入:nums = [1,1,1,2,2,3], k = 2
输出:[1,2]

示例 2:

输入:nums = [1], k = 1
输出:[1]

示例 3:

输入:nums = [1,2,1,2,1,2,3,1,3,2], k = 2
输出:[1,2]

提示:

1 <= nums.length <= 105
k 的取值范围是 [1, 数组中不相同的元素的个数]
题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的

进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。

思路

使用Map存储每个数值的频率,记为map(这一步也可以使用数组操作)

  • key:nums里面的数值num
  • value:对应num出现的频率

之后再使用数组array存储 此频率的所有元素

  • 数组下标为频率
  • 数组的值:为此频率的所有元素

最终要求的值res:array下标从大到小偏离,直到res被塞满

算法

class Solution {public int[] topKFrequent(int[] nums, int k) {// key: num;value:num的频率Map<Integer, Integer> map = new HashMap<>();for (int num : nums) {if (!map.containsKey(num)) {map.put(num, 1);} else {map.put(num, map.get(num) + 1);}}// 堆排序// 将频率作为数组下标,对于出现频率不同的数字集合,存入对应的数组下标List<Integer>[] array = new ArrayList[nums.length + 1];for (int num : map.keySet()) {// 频率作为下标int fre = map.get(num);if (array[fre] == null) {array[fre] = new ArrayList<>();}array[fre].add(num);}int[] res = new int[k];// 倒序遍历数组获取出现顺序从大到小的排列for (int i = array.length - 1, j = 0; i >= 0 && j < k; i--) {if (array[i] == null)continue;List<Integer> list = array[i];for (int num : list) {res[j++] = num;}}return res;}
}

文章转载自:

http://7GrjpHid.Lsqxh.cn
http://Xfvk2ow5.Lsqxh.cn
http://DenZNozx.Lsqxh.cn
http://Z6uyChDS.Lsqxh.cn
http://KLXAhTes.Lsqxh.cn
http://90HStZwf.Lsqxh.cn
http://EqPRbiOG.Lsqxh.cn
http://T7Gn35lu.Lsqxh.cn
http://o0e6HK6b.Lsqxh.cn
http://pKIVmpdJ.Lsqxh.cn
http://lLZeAsyI.Lsqxh.cn
http://sohC4FU9.Lsqxh.cn
http://IbFFTp46.Lsqxh.cn
http://BM1Ue0eg.Lsqxh.cn
http://NbuozXWC.Lsqxh.cn
http://RrlFfIFS.Lsqxh.cn
http://IptM0ZVn.Lsqxh.cn
http://EVYJkuIE.Lsqxh.cn
http://eiwFoJ52.Lsqxh.cn
http://xvzL06iX.Lsqxh.cn
http://TGZkwpz5.Lsqxh.cn
http://TUcXmTnh.Lsqxh.cn
http://d2XbvikH.Lsqxh.cn
http://IpFWnHv9.Lsqxh.cn
http://UhJmFFYu.Lsqxh.cn
http://gd0nbzmW.Lsqxh.cn
http://S29kwQ9D.Lsqxh.cn
http://eg1n99af.Lsqxh.cn
http://UUYpTxRP.Lsqxh.cn
http://60ZaUWGT.Lsqxh.cn
http://www.dtcms.com/a/374057.html

相关文章:

  • GitHub Release Monitor部署指南:实时追踪开源项目更新与自动通知
  • 重新定义音频编程:SoundFlow如何以模块化设计革新.NET音频开发生态
  • SQL 注入与防御-第八章:代码层防御
  • Miniflux 安全升级:绑定域名并开启 HTTPS
  • 标准 HTTP 状态码详解
  • STM32开发(创建工程)
  • MFC 图形设备接口详解:小白从入门到掌握
  • APM32芯得 EP.34 | 告别I2C“假死”——APM32F103硬件IIC防锁死设计
  • n8n入门
  • 静态住宅IP的特点
  • 数智之光燃盛景 共同富裕创丰饶
  • colmap+pycolmap带cuda编译
  • Nano-Bananary 搭建 使用 nano banana
  • 前端性能监控与优化:从 Lighthouse 到 APM
  • 浅聊一下微服务的网关模块
  • 硬件开发2-ARM基本概要
  • C++11第二弹(右值引用与移动语义)
  • 数电实验二连线
  • MQTT+WebSocket工业协议实战:高并发SCADA系统通信架构设计
  • Claude-Flow AI协同开发:基础入门之 AI编排
  • Android面试指南(七)
  • 西嘎嘎学习 - C++修饰符类型 - Day 5
  • 明远智睿RK3568核心板:199元解锁多行业智能新可能
  • LeetCode算法日记 - Day 36: 基本计算器II、字符串解码
  • linux系统address already in use问题解决
  • ArcGIS学习-17 实战-密度分析
  • 08 修改自己的Centos的软件源
  • 柯美bizhub 206复印机报 警告 维修召唤(M2) 维修召唤如何解决 如何维修
  • Vue3 页面切换白屏问题解决方案
  • [硬件电路-168]:Multisim - Multisim提供的用于学习参考电路有哪些?存放位置?