在一个有序的数组中查找元素,数组长度是无限的
public int search(int[] n,int dest){
int left = 0;
int mid = 0;
int right = 1;
//循环遍历,每次将间隔扩大2倍,直到找到找到比目标值大的元素位置
while(n[right] < dest){
left = right;
right *= 2;
}
//在新的右边界内,使用二分查找法
while(left + 1 < right){
mid = left + (right - left) / 2;
//如果中间位置的数字等于目标值,直接返回中间位置
if(n[mid] == dest){
return mid;
}
if(n[mid] < dest){
left = mid + 1;
} else {
right = mid - 1;
}
}
if(n[left] == dest){
return left;
}
if(n[right] == dest){
return right;
}
return -1;
}