问题描述
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
示例 1:
输入: [0,1,3]
输出: 2
示例 2:
输入: [0,1,2,3,4,5,6,7,9]
输出: 8
思路
看就有序就想到二分查找
通过比较下标和元素值就能得知缺失数字在左边还是右边
下标等于元素值缺失数字在中间值的右边
下标小于元素值缺失数字在中间值或着中间值的左边。
最后循环结束找到元素,
下标等于元素值缺失数字在元素的右边
下标小于元素值缺失数字在元素的左边。
class Solution {
public int missingNumber(int[] nums) {
int left = 0, right = nums.length-1, mid;
while(left < right){
mid = left + (right - left)/2;
if(mid == nums[mid]){
left = mid + 1;
}else{
right = mid;
}
}
if(nums[left] == left){
return nums[left] + 1;
}else{
return nums[left] - 1;
}
}
}