跳至主要內容

53(2)-0~n-1中缺失的数字

daipeng小于 1 分钟

一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

排序数组基本就暗示使用二分法,实际是和查找搜索位置是一样的。

public int missingNumber(int[] nums) {
        int lo = 0;
        int hi = nums.length - 1;
        while (lo < hi) {
            int mid = (lo + hi) >>> 1;
            if (nums[mid] > mid) { //肯定是在前半段
                hi = mid;
            }else{ //一定是后半段
                lo = mid + 1;
            }
        }
        if(lo == nums.length){
            return lo;
        }
        if(nums[lo] == lo){
            return lo + 1;
        }
        return lo;
    }