题目描述
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
示例
输入: [0,1,3]
输出: 2
输入: [0,1,2,3,4,5,6,7,9]
输出: 8
限制
<= 数组长度 <= 10000
题目思路
1.
java代码如下
public int missingNumber(int[] nums) {
for (int i = 0; i < nums.length; i++) {
if(nums[i] != i){
return i;
}
}
return nums.length;
}
运行结果
2.
java代码如下
//二分查找法
public int missingNumber1(int[] nums) {
int low=0,high=nums.length; //因为缺失元素也可能为索引最大的元素
while(low<high){
int mid=(low+high)>>1; //找中间位置
if(nums[mid]!=mid){ //说明mid之前(包括mid)有缺失
high=mid; //high定位到mid
}else{
low=mid+1; //说明mid之前均不缺失,则low重新定位
}
}
return low; //可模拟指针分析
}
运行结果如下