前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >347. 前 K 个高频元素

347. 前 K 个高频元素

作者头像
名字是乱打的
发布2021-12-24 08:29:16
2500
发布2021-12-24 08:29:16
举报
文章被收录于专栏:软件工程

一 题目:

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

代码语言:javascript
复制
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

二 思路:

使用小根堆来保留出现次数最多的k个数,堆顶为最多的k个数里的最小值 排序规则采用外部的map进行关联

三 代码:

代码语言:javascript
复制
class Solution {
        public int[] topKFrequent(int[] nums, int k) {
            //统计每个数字的数量
            Map<Integer, Integer> numCount =new HashMap<>();
            for (int num : nums) {
                if (numCount.containsKey(num)){
                    numCount.put(num,numCount.get(num)+1);
                }else {
                    numCount.put(num,1);
                }
            }

            //小根堆,只保留k个数的最大的值,堆顶保留的k个最大的里面的最小值
            final PriorityQueue<Integer> queue = new PriorityQueue<>(Comparator.comparingInt(numCount::get));

            //小根堆排序
            numCount.forEach((key, value) -> {
                if (queue.size() < k) {
                    queue.add(key);
                } else if (numCount.get(queue.peek()) < value) {
                    //只保留前k个数字
                    queue.poll();
                    queue.add(key);
                }
            });

            //结果赋值
            final int[] res = new int[k];
            int curr=0;
            while (!queue.isEmpty()){
                res[curr++]=queue.poll();
            }
            return res;
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 题目:
  • 二 思路:
  • 三 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档