我是靠谱客的博主 机灵夕阳,最近开发中收集的这篇文章主要介绍LeetCode——剑指 Offer II 060. 出现频率最高的 k 个数字题目思路代码结果,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

出现频率最高的 k 个数字

  • 题目
  • 思路
  • 代码
  • 结果

题目

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

思路

先利用一个hashmap来统计各个数字的个数,然后,将这个哈希表转化为一个优先队列,根据计数数字的大小来作为优先级判断。最终,优先队列的前k个元素就是所要寻找的答案!

代码

import java.util.Comparator;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.TreeMap;
// 自定义元素
class Element
{
    int num;
    int count;
    public Element(int num,int count)
    {
        this.num=num;
        this.count=count;
    }

    @Override
    public String toString() {
        return "Element{" +
                "num=" + num +
                ", count=" + count +
                '}';
    }
}
// 自定义排序规则
class  MyCmp implements Comparator<Element>
{
    @Override
    public int compare(Element o1, Element o2) {
        return o2.count-o1.count;
    }
}
class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        HashMap<Integer,Integer> map = new HashMap<>();
        PriorityQueue<Element> priorityQueue = new PriorityQueue<>(new MyCmp());
        int length = nums.length;
        // 利用一个哈希表来统计数字的个数
        for(int i=0;i<length;++i)
        {
            if(!map.containsKey(nums[i]))
                map.put(nums[i],1);
            else
                map.put(nums[i],map.get(nums[i])+1);
        }
        // 将哈希表转化为优先队列
        for (Integer n: map.keySet())
        {
            priorityQueue.add(new Element(n,map.get(n)));
        }
        int ans[]=new int[k];
        for (int i=0;i<k;++i)
        {
            ans[i]=priorityQueue.poll().num;
        }
        return ans;
    }
}

结果

在这里插入图片描述
目前没有什么更优的想法!

最后

以上就是机灵夕阳为你收集整理的LeetCode——剑指 Offer II 060. 出现频率最高的 k 个数字题目思路代码结果的全部内容,希望文章能够帮你解决LeetCode——剑指 Offer II 060. 出现频率最高的 k 个数字题目思路代码结果所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部