41 lines
1.2 KiB
Java
41 lines
1.2 KiB
Java
|
package heap;
|
|||
|
|
|||
|
import java.util.HashMap;
|
|||
|
import java.util.Map;
|
|||
|
import java.util.PriorityQueue;
|
|||
|
|
|||
|
/**
|
|||
|
* 题目: 347. 前 K 个高频元素 (topKFrequent)
|
|||
|
* 描述:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
|
|||
|
|
|||
|
* 示例 1:
|
|||
|
输入: nums = [1,1,1,2,2,3], k = 2
|
|||
|
输出: [1,2]
|
|||
|
|
|||
|
* 链接:https://leetcode.cn/problems/top-k-frequent-elements/
|
|||
|
*/
|
|||
|
public class TopKFrequent {
|
|||
|
public int[] topKFrequent(int[] nums, int k) {
|
|||
|
HashMap<Integer,Integer>map=new HashMap<>();
|
|||
|
PriorityQueue<int[]> minHeap = new PriorityQueue<>(
|
|||
|
(a, b) -> b[1] - a[1]);
|
|||
|
int[] res=new int[k];
|
|||
|
int i=0;
|
|||
|
for (int num : nums) {
|
|||
|
if(!map.containsKey(num))
|
|||
|
map.put(num,1);
|
|||
|
else
|
|||
|
map.put(num,map.get(num)+1);
|
|||
|
}
|
|||
|
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
|
|||
|
minHeap.add(new int[]{entry.getKey(),entry.getValue()});
|
|||
|
}
|
|||
|
while (!minHeap.isEmpty()) {
|
|||
|
if(i<k)
|
|||
|
res[i++] = minHeap.poll()[0];
|
|||
|
else break;
|
|||
|
}
|
|||
|
return res;
|
|||
|
}
|
|||
|
}
|