数组中前 k 个频繁元素的时间和 Space 复杂度

Time and Space Complexity of top k frequent elements in an array

关于给定问题的时间和 space 复杂性存在一些小混淆:

给定一个大小为 N 的数组,return 一个包含前 K 个频繁元素的列表。

基于最受欢迎的解决方案:

  1. 使用大小为 K 的 HashMap,每个条目的计数作为值。
  2. 遍历上面生成的HashMap,构建一个大小为K的MaxHeap
  3. 将 MaxHeap 中的元素弹出到列表中,然后 return 列表。

K 是输入中唯一元素的数量。

space 时间复杂度为:O(K) 和 O(K*log(K)

现在混乱从这里开始。我们知道在上述分析中我们正在处理最坏情况下的复杂性。因此,当数组中的所有元素都是唯一的时,K 可以取的最差值是 N。

因此K <= N。从而O(K)表示为O(N) ??

因此,上述问题的space和时间复杂度不应该是O(N)和O(N*log(N))吗?

我知道这是一个技术问题,但它已经困扰了我一段时间。请指教。

是的,你是对的,因为 K<N,hashmap 部分的时间复杂度应该是 O(N)

但是堆中只有 K 个元素,并且具有 O(Klog(K)) 的时间复杂度,如果渐近地考虑,它远大于 O(N) 的线性复杂度,因此导致最终时间复杂度 O(Klog(K)).