力扣hot100 前 K 个高频元素 小根堆 流 IntStream
•
Python
Problem: 347. 前 K 个高频元素
文章目录
- 思路
- 复杂度
- Code
思路
👨🏫 参考
- 小根堆(维护k个高频元素)
- 遍历所有元素,当前堆大小 < k 或者 当前元素出现次数大于堆顶元素出现次数:替换掉堆顶元素
复杂度
⏰ 时间复杂度:
O
(
n
log
k
)
O(n\log{k})
O(nlogk)
🌎 空间复杂度:
O
(
n
)
O(n)
O(n)
Code
class Solution {
public int[] topKFrequent(int[] nums, int k)
{
// 将一个数组(nums)转换为一个 Map 对象,并计算数组中每个元素出现的次数。 键 值 键冲突处理方案
Map map = IntStream.of(nums).boxed().collect(Collectors.toMap(e -> e, e -> 1, Integer::sum));
PriorityQueue heap = new PriorityQueue((o1, o2) -> {
return map.get(o1) - map.get(o2);
});// 存的是元素的值(只存 k 个最高频的元素)
for (Integer x : map.keySet())
{
if (heap.size() map.get(heap.peek()))
{
heap.remove();//去掉最小的
heap.add(x);//把较大的值加进去
}
}
int[] res = new int[k];
int idx = 0;
while (!heap.isEmpty())
res[idx++] = heap.poll();
return res;
}
}
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/52102d04e2.html

