【重点】【堆】347.前K个高频元素
2023-12-25 06:24:43
最大的K个元素 => 小根堆(类似上窄下宽的梯形)
最小的K个元素 => 大根堆(类似倒三角形)
法1:小根堆
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> valToCountMap = new HashMap<>();
for (int i : nums) {
valToCountMap.put(i, valToCountMap.getOrDefault(i, 0) + 1);
}
PriorityQueue<int[]> queue = new PriorityQueue<>((a, b) -> a[1] - b[1]);
for (Map.Entry<Integer, Integer> entry : valToCountMap.entrySet()) {
int val = entry.getKey(), count = entry.getValue();
if (queue.size() == k) {
if (count > queue.peek()[1]) {
queue.poll();
queue.offer(new int[]{val, count});
}
} else {
queue.offer(new int[]{val, count});
}
}
int[] res = new int[k];
for (int i = 0; i < k; ++i) {
res[i] = queue.poll()[0];
}
return res;
}
}
文章来源:https://blog.csdn.net/Allenlzcoder/article/details/135190017
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!