我是靠谱客的博主 机灵夕阳,最近开发中收集的这篇文章主要介绍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 个数字题目思路代码结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复