有一个排序的数组,其大小非常大。在这些元素中,除了一个元素之外,每个元素都会重复多次。解决这个问题的最佳算法的最差时间复杂度是什么,并且还给出了该算法
答案 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)
希望这有帮助