Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 查找跟随数组中搜索的时间复杂度_Algorithm_Analysis - Fatal编程技术网

Algorithm 查找跟随数组中搜索的时间复杂度

Algorithm 查找跟随数组中搜索的时间复杂度,algorithm,analysis,Algorithm,Analysis,有一个非常大的排序数组。在这些元素中,除一个元素外,每个元素都重复多次。解决此问题的最佳算法的最差时间复杂度是多少?同时给出该算法的时间复杂度应为log(n) 给定:排序数组中,除一个元素外的所有元素都重复。然后,直到单个元素,元素的索引将占据偶数和下一个奇数。在这个元素之后,它们将占据奇数和下一个偶数索引 使用此逻辑启动二进制搜索 bsearch (a, low, high) mid = (low + high)/2 if ((a[mid-1] != a[mid]) &

有一个非常大的排序数组。在这些元素中,除一个元素外,每个元素都重复多次。解决此问题的最佳算法的最差时间复杂度是多少?同时给出该算法的时间复杂度应为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)

希望这有帮助

我想它说的是“重复了不止一次”,而不是“重复了整整两次”或“重复了偶数次”…是的@nickie。谢谢你指出。我错过了:-(.如果是这样的话,那么算法可以通过哈希表来实现,以保持O(n)。这看起来像是家庭作业,所以我将回答另一个问题。如果数组没有排序,元素重复了偶数次,而一个元素出现了奇数,那么最好的解决方法是O(n).但我不会告诉你算法。这是一个技巧…当数组被排序时,你能做得更好吗?(由@smanohar回答)。如果你对奇数/偶数一无所知,你能做什么?如果你看一下我发布的可能重复的@nickie,你的答案与此类似吗?我很难想出数组排序的帮助。我没说它有帮助,我说,是吗?:-)