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

38-算法打卡-栈与队列-前 K 个高频元素-leetcode(347)-第三十八天

1 题目地址

347. 前 K 个高频元素 - 力扣(LeetCode)347. 前 K 个高频元素 - 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1] 提示: * 1 <= nums.length <= 105 * k 的取值范围是 [1, 数组中不相同的元素的个数] * 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的 进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。https://leetcode.cn/problems/top-k-frequent-elements/description/


2 题目说明

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

示例 1:

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

示例 2:

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

提示:

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

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

3 解题思路

 思路:
        1、统计元素出现的概率
        2、对频率排序
        3、找出前K个高频元素
前K个元素可以使用排序算法,但是在这里着重介绍下队列。
优先级队列其实就是一个披着队列外衣的堆,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。
堆是一棵完全二叉树,树中每个结点的值都不小于(或不大于)其左右孩子的值。 如果父亲结点是大于等于左右孩子就是大顶堆,小于等于左右孩子就是小顶堆。

       
4 代码编写

class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>();for (int i=0; i<nums.length; i++) {int count = map.getOrDefault(nums[i], 0) + 1;map.put(nums[i], count);}// 出现次数按从队头到队尾的顺序是从大到小排,出现次数最多的在队头(相当于大顶堆)PriorityQueue<int[]> queue = new PriorityQueue<>((a, b)->b[1]-a[1]);for (Map.Entry<Integer, Integer> entry : map.entrySet()) {//大顶堆需要对所有元素进行排序queue.add(new int[]{entry.getKey(), entry.getValue()});}int[] ans = new int[k];for (int i = 0; i < k; i++) { //依次从队头弹出k个,就是出现频率前k高的元素ans[i] = queue.poll()[0];}return ans;}
}

相关文章:

  • uni-app使用web-view组件APP实现返回上一页
  • 数组和切片的区别
  • 常见问题-SQLServer中创建新数据库使用哪个中文编码?
  • 无人机电池储存与操作指南
  • LlamaIndex 第六篇 SimpleDirectoryReader
  • PostgreSQL 的 pg_advisory_lock 函数
  • Redhat 系统详解
  • Windows系统下【Celery任务队列】python使用celery 详解(二)
  • Windows 下 dll转换成lib
  • vue知识点总结 依赖注入 动态组件 异步加载
  • 【星海随笔】信息安全相关标准
  • Windows下Dify连接Ollama无效
  • 反向沙箱介绍
  • C++ —— 类的嵌套和循环依赖问题
  • KERNEL32!NlsServerInitialize函数分析创建了一个目录对象和目录对象下面的5个对象
  • 【MySQL】-- 事务
  • 华为5.7机考第一题充电桩问题Java代码实现
  • 嵌入式系统架构验证工具:AADL Inspector v1.10 全新升级
  • 优雅草星云智控系统产品发布会前瞻:SNMP协议全设备开启指南-优雅草卓伊凡
  • 代码随想论图论part06冗余连接
  • 明查|哈佛大学批改美教育部长来信,红笔标出语法错误?
  • 中俄就应对美加征所谓“对等关税”等问题进行深入交流
  • 范志毅跨界归来做青训,探索中国足球人才培养新模式
  • 马克思主义理论研究教学名师系列访谈|曾瑞明:想通了才可能认准,认准了才能做好
  • 体坛联播|双杀阿森纳,巴黎晋级欧冠决赛对阵国际米兰
  • 五一假期上海虹桥边检站出入境近4.7万人次,韩国入境旅客同比增118%