面试题53 - II. 0~n-1中缺失的数字

在这里插入图片描述
考点主要还是二分法,题目每个条件都是有用的。所有题都拿来遍历,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;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_42350785/article/details/106588833