在下面的数组中找到搜索的时间复杂度

时间:2013-09-24 11:31:58

标签: algorithm analysis

有一个排序的数组,其大小非常大。在这些元素中,除了一个元素之外,每个元素都会重复多次。解决这个问题的最佳算法的最差时间复杂度是什么,并且还给出了该算法

1 个答案:

答案 0 :(得分:0)

应该是log(n)。

给定:排序的数组,重复除了一个以外的所有元素。然后,直到该单个元素,元素的索引将占据偶数和下一个奇数。在这个单个元素之后,它们将占用奇数和下一个偶数索引。

使用此逻辑启动二进制搜索。

bsearch (a, low, high)  
    mid = (low + high)/2  
    if ((a[mid-1] != a[mid]) && (a[mid+1] != a[mid]))  
          return a[mid]
    else
       mid = (mid & ~0x1) //making mid an even index
       if (a[mid] == a[mid+1]) //single element is after this index
                 bsearch (a, mid + 2, high)
       else //element is before this
                 bsearch (a, low, mid-1)

希望这有帮助