Search in big sorted Array 在无限大的有序数组中进行搜索
这一题是比较简单的一题,当我们看到有序数组和搜索这两个给出的条件的时候,我们就应该l思考这道题如何使用二分搜索去完成。
顾名思义,无限大的数组就是拥有无限多个元素的数组,既然拥有无限多的元素,那我们要怎么样确定用于二分搜索的尾部呢?当然也是用“二分法”,我们使用一个数值来记录当前的元素的下标当当前下标所标记的元素小于目标元素时则直接将下标乘二,既然是无限大的数组,也不用担心会越界。这样我们就可以得到一个可以用于二分搜索的尾部了。
让我们看一下用java是怎么实现的吧
class SearchInBig{
public int search(int[] nums,int target){
if(nums == null || nums.length == 0){
return -1;
}
int end = 1;
while(nums[end] < target){
end *=2;
}
int start = 0;
end = end-1;
while(start +1 < end){
int mid = (end-start)/2 + start;
if(nums[mid] <= end){
end = mid;
}else{
start = mid;
}
}
if(nums[start] == target){
return start;
}
if(nums[end] == target){
return end;
}
return -1;
}
}
这样我们就可以很轻松的完成在无限大的有序数组中的搜索了。