题目描述
给你一个整数数组 nums
和一个整数 k
,请你返回其中出现频率前 k
高的元素。你可以按 任意顺序 返回答案。
求解思路
- 由于这道题目要求统计元素才会出现的频率,所以考虑用HashMap来存储;
- 然后题目要求返回频次的前k个较大的值,题解中是采用优先级队列(堆)来完成;
- 我对堆不太熟悉,所以先通过遍历找出出现的最高频次;
- 然后再就最高频次逐步找比他小的;
- 详见代码。
输入输出示例
代码
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<>();
int[] res = new int[k];
for(int i : nums){
if(map.containsKey(i)){
map.put(i,map.get(i)+1);
}else{
map.put(i,1);
}
}
int maxCount = 0;
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue() > maxCount){
maxCount = entry.getValue();
}
}
while(k > 0){
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue() == maxCount){
res[k-1] = entry.getKey();
k--;
}
}
maxCount--;
}
return res;
}
}