题目给出一个长度为n-1的递增排序数组,数组中有且只有一个数字不在该数组中,求这个数字。根据观察,可以通过检查数组中的每个数字是否与其下标相等,若相等,则说明缺失的数字在后面,若不相等,则说明缺失的数字在前面。另外最后考虑数组中没有缺失数字的情况,返回数组最后一个数字加一。代码如下:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int size = nums.size();
int left = 0;
int right = size - 1;
int mid = 0;
while(left < right) //二分查找
{
mid = left + (right - left) / 2;
if(nums[mid] == mid) left = mid + 1;
else right = mid;
}
if(nums[size - 1] == size - 1) return size; //检查特殊情况
else return left;
}
};