【发布时间】:2016-04-09 23:51:33
【问题描述】:
例如,数组的答案:
1、11、3、95、23、8、1
将是 1,因为所有其他元素只出现一次,而 1 出现两次。
我在 stackoverflow 上看到的许多与此问题类似的问题都要求找到绝对多数(答案在长度为 n 的数组中至少出现 n/2),或者使用排序或哈希表。前者不是我要的,后者要么太慢( O(n log n) 用于排序)或使用太多内存( O(n) 用于哈希表)。
这样的算法存在吗?如果不是,是否有证据表明为什么这是不可能的?包括一个来源会很好。
【问题讨论】:
-
线性扫描怎么样?看来您对此没有任何想法。
-
你能解释一下你所说的线性扫描是什么意思吗,不,这不是功课
-
O(1) 空间似乎是一个很大的挑战
-
如果您的数组包含整数,那么您可以在 O(n) 时间和 O(1) 空间内完成。使用就地二进制基数排序对数组进行排序。然后遍历数组以确定最常见的元素。基数排序需要 32 次遍历数组,所以总共 33 次遍历,这是一个常数,所以 O(n)。