想象一下,您将获得一个已旋转的已排序数组,但您知道此数组中的最小值及其索引。
如何在这个数组上编写二进制搜索?
示例:
input array: [3,4,5,6,1,2]
search value: 4
min value index = 4
谢谢!
答案 0 :(得分:0)
通过在查找测试值时对索引应用转换,可以像在没有旋转的情况下对排序数组进行二进制搜索一样完成此操作:
testIndex = (searchIndex + minIndex) % arrayLength;
如果数组未旋转,searchIndex
是您将使用的索引,minIndex
是数组旋转的偏移量,testIndex
是您用来查看的索引从旋转的数组中获取一个值。
所以在你的例子中:
input array: [3,4,5,6,1,2]
minIndex: 4
first searchIndex: floor((arrayLength-1)/2) = 2
first testIndex: (4+2)%6 = 0