力扣题347前K个高频元素
发布日期:2022-03-04 11:48:17 浏览次数:4 分类:技术文章

本文共 1083 字,大约阅读时间需要 3 分钟。

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

示例 1:

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

输出: [1,2]
示例 2:

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

输出: [1]

1.自己的解法:首先统计每一个元素出现的次数,然后将其存储在哈希表中,然后将哈希表中的每一对以数组的形式存储在优先队列中(优先队列以出现次数为标准降序排列),然后取出优先队列中的前k个元素即可。

class Solution {    public int[] topKFrequent(int[] nums, int k) {        Map
map = new HashMap<>(); for (int num : nums) { map.put(num,map.getOrDefault(num,0) + 1);//统计每一个数字出现的次数,存储在哈希表中 } PriorityQueue
pq = new PriorityQueue<>(new Comparator
() {//优先队列,按照出现次数降序排列 public int compare(int[] num1,int[] num2) { return num2[1] - num1[1]; } }); for(Map.Entry
entry : map.entrySet()) { int num = entry.getKey(); int count = entry.getValue(); pq.offer(new int[]{num,count});//把哈希表中的每个元素加入优先队列中,进行排序 } int[] ans = new int[k]; for (int i = 0;i < k;i++) {//取出排序后优先队列中的前k个元素 ans[i] = pq.poll()[0]; } return ans; }}

题源:

转载地址:https://blog.csdn.net/xxyneymar/article/details/122134604 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:力扣题338比特位计数
下一篇:力扣题394字符串解码

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月26日 01时08分26秒