一个长度为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
限制:
1 <= 数组长度 <= 10000
具体代码实现如下:
class Solution {
public int missingNumber(int[] nums) {
// 创建双指针分别指向数组的首位元素下标
int l = 0;
int r = nums.length-1;
// 当l>r时跳出
while(l <= r){
// 取中间元素
int mid = (l+r)/2;
// 如果中间元素等于其下标,则缺少的数字在右边
if(mid == nums[mid]){
// 将左指针指向mid的右边
l = mid+1;
}else{// 如果不相等,则缺少的数字在左边
// 将右指针指向mid的左边
r = mid-1;
}
}
// 跳出循环时,l代表的下标就是所缺的元素值
return l;
}
}
人生若只如初见,何事秋风悲画扇。
等闲变却故人心,却道故人心易变。
-----------纳兰性德
小白寄语:学如逆水行舟,不进则退。