0

我有一个简单的算法任务,我想练习我的复杂性分析,我希望得到一些确认我是正确的。

任务是;实现一个函数,该函数接受一个 size 的数组n,并返回k最大值。实施应该是时间和空间有效的。

这是我的伪代码:

  1. 创建一个大小为 k + 1 的二进制最小堆。
  2. 对于数组中的每个数字;
    • 将值推送到堆上。
    • 如果堆大小现在大于 k,则弹出最小值。
  3. 从堆中弹出所有值并返回结果数组。

这是我对每个步骤的时间复杂度分析:

  1. 微不足道。
  2. 上)
    • O(log n)
    • 微不足道
  3. 好的)

所以总复杂度应该是 O(n.log n + k)?空间复杂度应该是 O(k + 1)?

此外,欢迎对我的方法提出任何批评。

提前致谢!

4

0 回答 0