0~n-1中缺失的数字
题目
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
思路
由于使用数组,递增排序并且有且只有一个数字不在数组中,因此可以想到,缺失数字之前的数字都与坐标对应相等,往后的都和坐标不相等;可以使用二分法找到数组中第一个与坐标不相等的数,则缺失的数字 即是该位置的坐标
代码实现
class Solution {
public:
int missingNumber(vector<int>& nums) {
int len = nums.size();
if(len <= 0)
return -1;
int start = 0;
int end = len - 1;
while(start <= end)
{
int mid = (start + end) / 2;
if(nums[mid] != mid)
{
if(mid == 0 || nums[mid - 1] == mid - 1)
return mid;
else
end = mid - 1;
}
else
start = mid + 1;
}
if(start == len) //leet-code测试用例中要求不存在缺失时,返回下一个数字
return len;
return -1;
}
};