这可以通过使用稍微修改的
binary search在O(logN)时间和O(1)空间中完成。
考虑新的数组Y,使得Y [i] = X [i] -i
Array X : -3 -1 0 3 5 7
index : 0 1 2 3 4 5
Array Y : -3 -2 -2 0 1 2
由于X中的元素以递增的顺序,元素在
新数组Y将以非递减顺序。所以一个二进制
在Y中搜索0将给出答案。
但是创建Y将需要O(N)空间和O(N)时间。所以,而不是
创建新的数组,你只是修改二进制搜索,使a
对Y [i]的引用被替换为X [i] -i。
算法:
function (array X)
low = 0
high = (num of elements in X) - 1
while(low <= high)
mid = (low + high) / 2
// change X[mid] to X[mid] - mid
if(X[mid] - mid == 0)
return mid
// change here too
else if(X[mid] - mid < 0)
low = mid + 1;
else
high = mid - 1;
end while
return -1 // no such index exists...return an invalid index.
end function