一尘不染

在不到线性的时间内,找到排序数组中的重复项

algorithm

今天,一名面试官问我这个问题。我的直接反应是,我们可以简单地进行线性搜索,将当前元素与数组中的前一个元素进行比较。然后他问我如何在不到线性的时间内解决问题。

假设条件

  • 数组已 排序
  • 只有 一个 重复
  • 该数组 填充有数字[0, n],其中n是数组的长度。

数组示例 :[0,1,2,3,4,5,6,7,8,8,9]

我试图提出一种分而治之的算法来解决这个问题,但是我不确定这是正确的答案。有人有什么想法吗?


阅读 185

收藏
2020-07-28

共1个答案

一尘不染

可以使用修改后的二进制搜索在O(log N)中完成:

从数组中间开始:如果array [idx] <idx,则重复项在左侧,否则在右侧。冲洗并重复。

2020-07-28