题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
分析:
二分法适用于已经排好序的数组的查找。所以这个题目中我们使用二分法进行查找。先将数组一分为二,将中间下标数组的值和下标进行比较,如果数组的值大于下标的值,说明在左边缺少一个数,那么从左边继续二分查找,直到左指针等于右指针;如果数组的值等于下标的值,说明右边缺少一个数,从右边进行二分查找。
代码片段:
public int missingNumber(int[] nums) {
int left=0;
int right=nums.length-1;
//当左指针小于等于右指针的时候,一直查找。
while(left<=right){
int mid=(left+right)/2;
if(nums[mid]==mid){
left=mid+1;
}
else {
right=mid-1;
}
}
//二分查找到最后,左指针的值就是缺少的数。
return left;
}