【发布时间】:2011-11-28 22:18:32
【问题描述】:
有没有办法在 O(N) 时间内找到 N 个元素的数组中的所有重复元素?
例子:
输入:11, 29, 81, 14, 43, 43, 81, 29
输出:29, 81, 43
对输入进行排序并进行线性扫描以检测重复项会破坏顺序并给出输出:29,43,81。
根据给定的数组对另一个索引数组{0,1,...N-1}进行键排序得到{1,4,2},然后对结果索引集进行排序得到{1,2,4}将给我们{29,81,43},但这需要@987654327 @时间。
有解决这个问题的 O(N) 算法吗?
附:我忘了补充:我不想使用哈希表。我正在寻找非哈希解决方案。
【问题讨论】:
-
如果空间不是限制,将每个元素存储在哈希中。发生碰撞时,您有一个副本。
-
@Anurag:最佳情况/平均运行时间 O(n) 但最坏情况 O(n2)。
-
@Anurag:你说的散列究竟是什么意思?
-
@Charles Bailey:我认为他的意思是地图。
-
您为什么要寻找非哈希解决方案?