我有一个简单的算法任务,我想练习我的复杂性分析,我希望得到一些确认我是正确的。
任务是;实现一个函数,该函数接受一个 size 的数组n
,并返回k
最大值。实施应该是时间和空间有效的。
这是我的伪代码:
- 创建一个大小为 k + 1 的二进制最小堆。
- 对于数组中的每个数字;
- 将值推送到堆上。
- 如果堆大小现在大于 k,则弹出最小值。
- 从堆中弹出所有值并返回结果数组。
这是我对每个步骤的时间复杂度分析:
- 微不足道。
- 上)
- O(log n)
- 微不足道
- 好的)
所以总复杂度应该是 O(n.log n + k)?空间复杂度应该是 O(k + 1)?
此外,欢迎对我的方法提出任何批评。
提前致谢!