class Solution {
public int[] topKFrequent(int[] nums, int k) {
// 边界情况判断
if(k==nums.length){
return nums;
}
// 放在map中计数
Map<Integer, Integer> map = new HashMap<>();
for(int i=0; i<nums.length;i++){
if(map.containsKey(nums[i])){
map.put(nums[i],map.get(nums[i])+1);
}else{
map.put(nums[i],1);
}
}
// 创建优先队列,大的frequency 放在前面
Queue<Integer> heap = new PriorityQueue<>(
(n1,n2) -> map.get(n2)-map.get(n1)
);
// 将map的keyset放在heap中(顺序根据map.get(key))
for(int n : map.keySet()){
heap.add(n);
}
// 取出前k个数
int[] top_fre = new int[k];
for(int i=0; i<k; i++){
top_fre[i] = heap.poll();
}
return top_fre;
}
}
leetcode 347 Top Frequent Elements
最新推荐文章于 2024-08-06 22:38:14 发布