今天,一名面试官问我这个问题。我的直接反应是,我们可以简单地进行线性搜索,将当前元素与数组中的前一个元素进行比较。然后他问我如何在不到线性的时间内解决问题。
假设条件
[0, n]
n
数组示例 :[0,1,2,3,4,5,6,7,8,8,9]
我试图提出一种分而治之的算法来解决这个问题,但是我不确定这是正确的答案。有人有什么想法吗?
可以使用修改后的二进制搜索在O(log N)中完成:
从数组中间开始:如果array [idx] <idx,则重复项在左侧,否则在右侧。冲洗并重复。