一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不再该数组中,请找出这个数字。
思路:可选有n个,长度为n-1,不重复还递增,那么第一个下标与值不等的就是结果咯。显然,还是二分的节奏。
int GetMissingNumber(const int* numbers,int length)
{
if(numbers==nullptr||length<=0)
return -1;
int left=0;
int right=length-1;
while(left<=right)
{
int middle=(right+left)>>1;
if(numbers[middle]!=middle)
{
if(middle==0||numbers[middle-1]==middle-1)
return middle;
right=middle-1;
}
else
left=middle+1;
}
if(left==length)
return length;
return -1;
}