347. 前 K 个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
解析
考察两点,一是对map的values进行排序;二是使用最大堆存储前k个
class Solution {
public int[] topKFrequent(int[] nums, int k) {
if(k<=0) return new int[0];
int[] res = new int[k];
if(nums==null||nums.length==0) return res;
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0 ; i<nums.length;i++){
map.put(nums[i],map.getOrDefault(nums[i],0)+1);
}
PriorityQueue<Map.Entry<Integer,Integer>> heap = new PriorityQueue<>((o1,o2)->{return o2.getValue()-o1.getValue();});
heap.addAll(map.entrySet());
for(int i = 0 ; i < k;i++){
Map.Entry<Integer,Integer> entry = heap.poll();
res[i] = entry.getKey();
}
return res;
}
}
注意:本文归作者所有,未经作者允许,不得转载