题目
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
思路
排序数组搜索,优先想到二分(有序数组查找)
主要把数组分成两部分,先找到数组中点mid
,如果nums[mid] == mid
,说明从最开始的位置到重点位置都是有序且归位的(不存在数字缺漏),则从后半部分继续查找;如果nums[mid] != mid
,说明前半部分不是严格有序,有数字缺漏,所以中点元素值对应不上下标
java代码如下:
class Solution{
public int missingNumber(int[] nums){
int left = 0;
int right = nums.length - 1;
while(left <= right){
int mid = left + (right - left) / 2;
if(nums[mid] == mid){//说明前半部分有序,missing数字在后半部分
left = mid + 1;
} else {//说明前半部分有miss数字
right = mid - 1;
}
}
return left;
}
}