【发布时间】:2015-01-13 12:06:50
【问题描述】:
我有一个面试,有以下问题:
在少于 O(n) 的时间内从排序的数组中找到唯一的数字。
Ex: 1 1 1 5 5 5 9 10 10 Output: 1 5 9 10
我给出了解决方案,但那是 O(n)。
编辑:排序后的数组大小约为 200 亿,唯一数约为 1000。
【问题讨论】:
-
你必须至少知道最后一个元素,所以你不必至少遍历所有元素一次。所以最小界限是 O(N)
-
如果新的“唯一”编号与最后一个索引上的编号相同,则退出循环。因此,如果到达第一个
3,就可以停止循环。 -
@Tom 仍然是 O(N)
-
@Tom 它仍然与元素数量成线性关系,因此 O(N)。我希望你知道 O(N) 是什么意思?
-
你可以根据抽样/二分搜索来做一些事情,尽管很难猜测它会如何工作。
标签: java algorithm time-complexity