给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
1.自己的解法:首先统计每一个元素出现的次数,然后将其存储在哈希表中,然后将哈希表中的每一对以数组的形式存储在优先队列中(优先队列以出现次数为标准降序排列),然后取出优先队列中的前k个元素即可。
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<>();
for (int num : nums) {
map.put(num,map.getOrDefault(num,0) + 1);//统计每一个数字出现的次数,存储在哈希表中
}
PriorityQueue<int[]> pq = new PriorityQueue<>(new Comparator<int[]>() {//优先队列,按照出现次数降序排列
public int compare(int[] num1,int[] num2) {
return num2[1] - num1[1];
}
});
for(Map.Entry<Integer,Integer> entry : map.entrySet()) {
int num = entry.getKey();
int count = entry.getValue();
pq.offer(new int[]{num,count});//把哈希表中的每个元素加入优先队列中,进行排序
}
int[] ans = new int[k];
for (int i = 0;i < k;i++) {//取出排序后优先队列中的前k个元素
ans[i] = pq.poll()[0];
}
return ans;
}
}
题源:力扣