考点主要还是二分法,题目每个条件都是有用的。所有题都拿来遍历,offer也就遍历到别人那里去了
在这里插入代码片
class Solution {
public int missingNumber(int[] nums) {
int i = 0, j = nums.length - 1;
while(i <= j) {
int m = (i + j) / 2;
if(nums[m] == m) i = m + 1;
else j = m - 1;
}
return i;
}
}
class Solution {
public:
int missingNumber(vector<int>& nums) {
int n = nums.size();
int ans = 0;
int l = 0, r = n - 1;
if(n == 0) return 0;
int mid;
while(l <= r){// 二分查找,第一个nums值大于index的位置
mid = (l + r) >> 1;
if(nums[mid] > mid){
r = mid - 1;
ans = mid;
}else{
l = mid+ 1;
}
}
if(ans == 0 && nums[0] == 0) return n; // 特殊情况处理,缺少n
return ans;
}
};