ACWING68. 0到n-1中缺失的数字(剑指offer,二分)

一个长度为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;
    }
};
发布了843 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/tomjobs/article/details/104995065