Arrays 知道排序数组中的最小值,如何使用二进制搜索?

Arrays 知道排序数组中的最小值,如何使用二进制搜索?,arrays,binary-search,Arrays,Binary Search,假设您得到一个已旋转的排序数组,但您知道该数组中的最小值及其索引 如何在此数组上编写二进制搜索 例如: input array: [3,4,5,6,1,2] search value: 4 min value index = 4 谢谢 这可以通过在查找测试值时对索引应用转换来完成,就像在排序数组上进行二进制搜索一样,不需要旋转: testIndex = (searchIndex + minIndex) % arrayLength; 其中,searchIndex是未旋转数组时将使用的索引,mi

假设您得到一个已旋转的排序数组,但您知道该数组中的最小值及其索引

如何在此数组上编写二进制搜索

例如:

input array: [3,4,5,6,1,2]
search value: 4
min value index = 4

谢谢

这可以通过在查找测试值时对索引应用转换来完成,就像在排序数组上进行二进制搜索一样,不需要旋转:

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

Hi starchild,在这种情况下,如何处理lo和Hi指针?在正常的二进制搜索中,如果nums[mid]target,hi=mid-1和lo,您仍然会像在正常的二进制搜索中一样设置
mid
low
high
。只有在实际查找数组中的测试值以进行值比较时,才能转换索引。