您首先需要找到中位数,这可以在O(n)(例如使用Hoare的Quickselect算法)中完成.
然后,您将需要实现一种排序算法,该算法根据它们与中位数的绝对距离(首先是最小距离)对数组中的元素进行排序.
如果您以这种方式对整个数组进行排序,这通常需要从某个位置O(n * log n)开始O(n^2),具体取决于所使用的算法.但是,由于您只需要第一个k值,因此复杂性可以降低O(k * log n)到O(k * n).
由于k是常数并且不依赖于数组的大小,因此在最坏情况下的总体复杂性将是:( O(n)用于找到中值)+ O(k * n)(排序),这是O(n)总体的.
| 归档时间: |
|
| 查看次数: |
2865 次 |
| 最近记录: |