Algorithm 查找跟随数组中搜索的时间复杂度
有一个非常大的排序数组。在这些元素中,除一个元素外,每个元素都重复多次。解决此问题的最佳算法的最差时间复杂度是多少?同时给出该算法的时间复杂度应为log(n) 给定:排序数组中,除一个元素外的所有元素都重复。然后,直到单个元素,元素的索引将占据偶数和下一个奇数。在这个元素之后,它们将占据奇数和下一个偶数索引 使用此逻辑启动二进制搜索Algorithm 查找跟随数组中搜索的时间复杂度,algorithm,analysis,Algorithm,Analysis,有一个非常大的排序数组。在这些元素中,除一个元素外,每个元素都重复多次。解决此问题的最佳算法的最差时间复杂度是多少?同时给出该算法的时间复杂度应为log(n) 给定:排序数组中,除一个元素外的所有元素都重复。然后,直到单个元素,元素的索引将占据偶数和下一个奇数。在这个元素之后,它们将占据奇数和下一个偶数索引 使用此逻辑启动二进制搜索 bsearch (a, low, high) mid = (low + high)/2 if ((a[mid-1] != a[mid]) &
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)
希望这有帮助我想它说的是“重复了不止一次”,而不是“重复了整整两次”或“重复了偶数次”…是的@nickie。谢谢你指出。我错过了:-(.如果是这样的话,那么算法可以通过哈希表来实现,以保持O(n)。这看起来像是家庭作业,所以我将回答另一个问题。如果数组没有排序,元素重复了偶数次,而一个元素出现了奇数,那么最好的解决方法是O(n).但我不会告诉你算法。这是一个技巧…当数组被排序时,你能做得更好吗?(由@smanohar回答)。如果你对奇数/偶数一无所知,你能做什么?如果你看一下我发布的可能重复的@nickie,你的答案与此类似吗?我很难想出数组排序的帮助。我没说它有帮助,我说,是吗?:-)