在O(n)时间和O(1)额外空间中找到最大重复数

时间:2016-08-31 13:58:51

标签: arrays sorting counting-sort

在O(n)时间和O(1)额外空间中查找最大重复数(最多出现的数字)。

我认为我可以使用维持计数数组的计数排序阶段,然后可以在O(N)中完成。我是对的吗?

但如何处理额外的空间。还有其他有效的算法吗?

1 个答案:

答案 0 :(得分:2)

我不认为在没有任何关于阵列中可能的数字的进一步知识的情况下这是可能的。对于直觉,请考虑以下内容:对于您准备使用的任何恒定内存量(c = O(1)),有一个序列使得在n-1点有c+1个可能的正确答案并且只有最后一个数字打破平局。在这种情况下,具有常量内存c的算法无法在一次传递中找到答案。这适用于几个(恒定量)通过。

让我们看看我们能做些什么。

  • 如果我们知道最多有k个唯一数字,我们可以通过保持计数数组(或无序地图的常量)在O(n)中找到O(k)额外空格的答案如果k数字不需要是连续的,则查找成本。但是,如果我们无法绑定除k以外的k<n,那么在最坏的情况下这将成为O(n)额外空间。
  • 如果我们在O(n log(n))中对数组进行排序,我们就可以在O(n)中找到答案。因此总复杂度为O(n log(n))O(1)额外空间。