题目描述
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。
在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
样例
输入:[0,1,2,4]
输出:3
问题分析
此题用二分法。缺失的数应该在的位置之前的数,它们的下标和数是相等的,从缺失的数应该在的位置开始往后,这些位置的数都大于它们的下标。所以我们利用这个性质来进行二分查找,找到缺失的数应该在的位置,返回即可。
代码实现
class Solution {
public:
int getMissingNumber(vector<int>& nums) {
int l = 0, r = nums.size();
while(l < r){
int mid = l + r >> 1;
if(nums[mid] == mid)
l = mid + 1;
else
r = mid;
}
return l;
}
};