一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。
在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。
样例
输入:[0,1,2,4]
输出:3
思路:
缺失部分及之后的位置,都满足a[i] = i + 1,二分到这个边界点即可。二分不能更新到ans的时候,也就是缺失的是最后一个数字,答案返回nums.size(),所以ans初始化为nums.size()。
class Solution {
public:
int bin(vector<int>& nums) {
int l = 0,r = nums.size() - 1;
int ans = nums.size();
while(l <= r) {
int mid = (l + r) >> 1;
if(nums[mid] > mid) {
ans = mid;
r = mid - 1;
}
else l = mid + 1;
}
return ans;
}
int getMissingNumber(vector<int>& nums) {
int n = nums.size();
if(!n)return 0;
int ans = bin(nums);
return ans;
}
};