题目描述:
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2:
输入: nu
ms = [1], k = 1 输出: [1]
解法如下:
class Solution {
public int[] topKFrequent(int[] nums, int k) {
int [] result=new int [k];
HashMap<Integer,Integer> map=new HashMap<>();
for(int num:nums)
{
map.put(num,map.getOrDefault(num,0)+1);
}
Set<Map.Entry<Integer,Integer>> entries=map.entrySet();
PriorityQueue<Map.Entry<Integer,Integer>> queue=new PriorityQueue<>((o1,o2)->o1.getValue()-o2.getValue());
for(Map.Entry<Integer,Integer> entry:entries)
{
queue.offer(entry);
if(queue.size()>k)
{
queue.poll();
}
}
for(int i=0;i<k;i++)
{
result[i]=queue.poll().getKey();
}
return result;
}
}
掌握要求:
(1)Set<Map.Entry<Integer,Integer>> entries=map.entrySet();:将map的键值对保存在set集合中
(2)掌握优先队列: PriorityQueue<Map.Entry<Integer,Integer>> queue=new PriorityQueue<>((o1,o2)->o1.getValue()-o2.getValue());——————————从大到小排
PriorityQueue<Map.Entry<Integer,Integer>> queue=new PriorityQueue<>((o1,o2)->o2.getValue()-o1.getValue());————从小到大排