剑指 Offer 53 - II. 0~n-1中缺失的数字
题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字
解法一
思路:若缺失的是(0,n-1)中的某个数(不包括0和n-1),其特征是后一个元素与前一个元素的差为2,否则缺的要么是0,要么是n-1,再另加讨论即可
代码:
class Solution {
public int missingNumber(int[] nums) {
if(nums.length1){
return 1-nums[0];
}
int i =1;
while(nums[i]-nums[i-1]1){
i++;
if(inums.length){
break;
}
}
if(inums.length && nums[i-1]==nums.length){
return 0;
} else{
return nums[i-1]+1;
}
}
}
解法二-二分查找
思路:如果缺失的数在左半部分,则nums[m]!=m,关键在于最后返回l
class Solution {
public int missingNumber(int[] nums) {
int l=0,r=nums.length-1;
int ret=-1;
if(l==r){
return 1-nums[0];
}
while(l<=r){
int m =(l+r)/2;
if(nums[m]!=m){ //说明在左半部分
r=m-1;
} else{ //说明在右半部分
l=m+1;
}
}
return l;
}
}

浙公网安备 33010602011771号