我是靠谱客的博主 沉静蜡烛,最近开发中收集的这篇文章主要介绍LeetCode 刷题笔记 之 频率最高的k个数(Top K Frequent Elements),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
题目如下:
Given a non-empty array of integers, return the k most frequent elements.
For example,
Given [1,1,1,2,2,3]
and k = 2, return [1,2]
.
Note:
- You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
- Your algorithm's time complexity must be better than O(n log n), where n is the array's size.
解答如下:
class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
HashMap<Integer,Integer> Freq=new HashMap<Integer,Integer>();//构建频率表
for(int i=0;i<nums.length;i++){
if(Freq.containsKey(nums[i])){
int tmp=Freq.get(nums[i]);
Freq.remove(nums[i]);
Freq.put(nums[i],tmp+1);//频率加一
}
else Freq.put(nums[i],1);
}
List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(Freq.entrySet());
Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>() {//对map进行排序
public int compare(Map.Entry<Integer, Integer> o1,
Map.Entry<Integer, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
int i=0;
List<Integer> topk=new ArrayList<Integer>();
for(Map.Entry<Integer,Integer> mapping:list){ //输出频率最高的k个数
if(i==k) break;
topk.add(mapping.getKey());
i++;
}
return topk;
}
}
最后
以上就是沉静蜡烛为你收集整理的LeetCode 刷题笔记 之 频率最高的k个数(Top K Frequent Elements)的全部内容,希望文章能够帮你解决LeetCode 刷题笔记 之 频率最高的k个数(Top K Frequent Elements)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复