package leetcode;
public class offer_53_2 {
//有序数组都应想到二分法
public int missingNumber(int[] nums) {
int left=0;
int right=nums.length-1;
int mid=(left+right)/2;
int lmid=mid-left;
int lnum=nums[mid]-nums[left];
//如果不是从0开始,那就是0丢失
if(nums[0]!=0) {return 0;}
//如果最后一个值不是nums.length-1,则为nums.length-1
if(nums[right]!=right+1) {return right+1;}
//二分法
while(left<right) {
if(left==mid) {break;}
//nums[j]-nums[i]的值与j-i值相等,则当前一半完整,否则在另一半
if(lmid==lnum) {
left=mid;
}
else {
right=mid;
}
mid=(left+right)/2;
lmid=mid-left;
lnum=nums[mid]-nums[left];
}
//丢失的即为mid+1
System.out.println(left+1);
return left+1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
offer_53_2 off=new offer_53_2();
int[] nums= {0,1,2,3,4,5,6,7,9};
off.missingNumber(nums);
}
}