栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode 剑指 Offer II 060. 出现频率最高的 k 个数字

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 剑指 Offer II 060. 出现频率最高的 k 个数字

LeetCode 剑指 Offer II 060. 出现频率最高的 k 个数字

文章目录
  • LeetCode 剑指 Offer II 060. 出现频率最高的 k 个数字
  • 题目描述
  • 一、解题关键词
  • 二、解题报告
    • 1.思路分析
    • 2.时间复杂度
    • 3.代码示例
    • 2.知识点
  • 总结
  • 相同题目

题目描述

给定一个整数数组 nums 和一个整数 k ,请返回其中出现频率前 k 高的元素。可以按 任意顺序 返回答案。
  示例 1:
  输入: nums = [1,1,1,2,2,3], k = 2
  输出: [1,2]

剑指 Offer II 060. 出现频率最高的 k 个数字
提示:

1 <= nums.length <= 105
k 的取值范围是 [1, 数组中不相同的元素的个数]
题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的
一、解题关键词
 
二、解题报告 
1.思路分析 
2.时间复杂度 
3.代码示例 
class Solution {
 public int[] topKFrequent(int[] nums, int k) {
        int len = nums.length;
        //堆排
        Map map = new HashMap<>();
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }

        PriorityQueue queue = new PriorityQueue(new Comparator() {
            public int compare(int[] m, int[] n) {
                return m[1] - n[1];
            }
        });

        for (Map.Entry entry : map.entrySet()) {
            int num = entry.getKey(), count = entry.getValue();
            if (queue.size() == k) {
                if (queue.peek()[1] < count) {
                    queue.poll();
                    queue.offer(new int[]{num, count});
                }
            } else {
                queue.offer(new int[]{num, count});
            }
        }
        int[] ret = new int[k];
        for (int i = 0; i < k; i++) {
            ret[i] = queue.poll()[0];
        }
        return ret;
    }
}
2.知识点
 

总结 相同题目

xxx

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/863336.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号