我知道类似的问题可能需要花费很多时间,但与那些不同。
给定值为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
答案 0 :(得分:7)
不能以线性方式完成,数组未排序,因此在最坏的情况下需要读取所有元素。
这种直觉非常通用,并且适用于处理未排序数组的许多算法,因为你的重复元素可以等待你的“绑定”。
当然,同样的直觉不适用于排序数组的问题。
答案 1 :(得分:1)
不能在亚线性时间内完成。输入没有这样的属性(如排序数组),让你在log(N)时间内完成。