53(2)-0~n-1中缺失的数字
小于 1 分钟
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
排序数组基本就暗示使用二分法,实际是和查找搜索位置是一样的。
public int missingNumber(int[] nums) {
int lo = 0;
int hi = nums.length - 1;
while (lo < hi) {
int mid = (lo + hi) >>> 1;
if (nums[mid] > mid) { //肯定是在前半段
hi = mid;
}else{ //一定是后半段
lo = mid + 1;
}
}
if(lo == nums.length){
return lo;
}
if(nums[lo] == lo){
return lo + 1;
}
return lo;
}