347.TopK Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2]

Example 2:

Input: nums = [1], k = 1 Output: [1]

 

public List<Integer> topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int n : nums) {
map.put(n, map.getOrDefault(n, 0) + 1);
}
PriorityQueue<Map.Entry<Integer, Integer>> minHeap = new PriorityQueue<>((o1, o2) -> o1.getValue().compareTo(o2.getValue()));
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (minHeap.size() != k) {
minHeap.offer(entry);
} else {
if (minHeap.peek().getValue() < entry.getValue()){
minHeap.poll();
minHeap.offer(entry);
}
}
}
List<Integer> res = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : minHeap) {
res.add(entry.getKey());
}
return res;
}
posted @ 2022-12-02 11:34  MarkLeeBYR  阅读(16)  评论(0)    收藏  举报