Algorithm/src/main/java/heap/TopKFrequent.java

41 lines
1.2 KiB
Java
Raw Normal View History

2025-04-04 12:05:49 +08:00
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;
}
}