0到n-1中缺失的数字
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字
都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组
中,请找出这个数字。
思路:
假设有数组
index : 0 1 2 3 4 5 6
array : 0 1 2 4 5 6 7
我们会发现缺失的是3,数组如果不缺失数字,index和值是一样的,只要缺失,从缺失的那个数字开始就index !=array
整个数组分为了两段,所以我们可以用二分的思想去找这个边界
如果nums[mid]!= mid 并且 nums[mid-1]==mid 代表就是边界,直接return
此时如果只符合nums[mid] !=mid 说明边界在前面,r = mid -1;
如果 nums[mid]==mid 说明还在后面调整 l 让 l = mid+1;
如果找了都没有应该返回后面的数字,0,1,2,3 就应该返回 4
public int getMissingNumber(int[] nums) {
if(nums==null|| nums.length<0){
return 0;
}
int l = 0,r = nums.length-1;
while(l<=r){
int mid = (l+r)>>1;
if(mid !=nums[mid]){//在前面
if(mid == 0||nums[mid-1]==mid-1){
//说明此时就是该分界点
return mid;
}
//要么还在前面不包括自己
r = mid -1 ;
}else {//在后面
l = mid + 1;
}
}
return r+1;//出了while还没找到,返回数组末尾下标的下一个数
}