难度:简单。
标签:数组,二分查找。
一般来说mid处的值为mid,使用二分法找到第一个mid处值不为mid的数。注意边界。
正确解法:
class Solution {
public:
int missingNumber(vector<int>& nums) {
int n = nums.size();
int left = 0, right = n - 1, mid = n - 1;
while(left <= right){
mid = (left + right) / 2;
if(nums[mid] != mid && (mid == 0 || nums[mid - 1] == mid - 1)){
break;
}
if(mid == n - 1){
mid = n;
break;
}
if(nums[mid] != mid){
right = mid - 1;
}
else{
left = mid + 1;
}
}
return mid;
}
};
结果: