LeetCode72|前K个高频元素
时间:2022-07-26
本文章向大家介绍LeetCode72|前K个高频元素,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1,问题简述
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
2,示例
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
提示:
你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。
题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。
你可以按任意顺序返回答案。
3,题解思路
优先级队列的使用,也就是堆
4,题解程序
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
public class TopKFrequentTest2 {
public static void main(String[] args) {
int[] nums = {1, 1, 1, 2, 2, 3};
int k = 2;
int[] topKFrequent = topKFrequent(nums, k);
for (int num : topKFrequent
) {
System.out.print(num + "t");
}
}
public static int[] topKFrequent(int[] nums, int k) {
if (nums == null || nums.length == 0 || nums.length < k) {
return new int[k];
}
PriorityQueue<Map.Entry<Integer, Integer>> priorityQueue = new PriorityQueue<>(k, (o1, o2) -> o2.getValue().compareTo(o1.getValue()));
HashMap<Integer, Integer> hashMap = new HashMap<>(nums.length);
for (int num : nums
) {
hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
}
for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()
) {
priorityQueue.offer(entry);
}
int[] array = new int[k];
for (int i = 0; i < k; i++) {
array[i] = priorityQueue.poll().getKey();
}
return array;
}
}
5,题解程序图片版
6,总结
hashMap键值对集合加上堆排序的使用,也算是堆,即优先级队列的使用吧,一般自己的写法都是很常规的写法,所以看懂java语法就知道怎么个意思了。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux内核设备驱动之高级字符设备驱动笔记整理
- Linux使用scp命令进行文件远程拷贝详解
- Linux内核设备驱动之Linux内核模块加载机制笔记整理
- linux无损扩容的方法
- Linux内核设备驱动之内核的时间管理笔记整理
- 使用squid搭建http和https的代理服务器设置指南
- linux中gdb的入门使用教程
- Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的区别和使用详解
- Linux lseek函数的使用详解
- Nginx出现500 Internal Server Error 错误的解决方案
- Linux常见基本命令与用法大全
- Navicat 环境测试 innodb 的默认行锁升级表锁
- Ubuntu18.04更换国内源的方法示例
- 详解ubuntu双系统启动时卡死解决办法
- 轻松掌握Git开发(二)本地仓库的基本操作