在O(log n)时间内查找数组中的重复元素

时间:2012-06-13 14:21:31

标签: arrays algorithm

我知道类似的问题可能需要花费很多时间,但与那些不同。

给定值为1 to N-1的未排序整数数组中有一个重复元素(N是数组的大小,最大值是N-1,因为重复元素)。找到重复元素的最佳方法是什么?如果可能的话O(log n)。`

我知道O(n)解决方案但是有没有办法在O(log n)时间内解决这个问题?

O(n)解决方案:

1) Find sum of first N-1 natural numbers using N(N-1)/2, lets say it SUM1
2) Find sum of all the elements of the arrays, let say it SUM2

Duplicate = SUM2 - SUM1

2 个答案:

答案 0 :(得分:7)

不能以线性方式完成,数组未排序,因此在最坏的情况下需要读取所有元素。

这种直觉非常通用,并且适用于处理未排序数组的许多算法,因为你的重复元素可以等待你的“绑定”。

当然,同样的直觉不适用于排序数组的问题。

答案 1 :(得分:1)

不能在亚线性时间内完成。输入没有这样的属性(如排序数组),让你在log(N)时间内完成。