劍指Offer-n-1中缺失的數字

47.0~n-1中缺失的數字

一個長度爲n-1的遞增排序數組中的所有數字都是唯一的,並且每個數字都在範圍0~n-1之內。在範圍0~n-1內的n個數字中有且只有一個數字不在該數組中,請找出這個數字。

示例 1:

輸入: [0,1,3]
輸出: 2
示例 2:

輸入: [0,1,2,3,4,5,6,7,9]
輸出: 8

思路

二分。

二分的條件是數組下標與其對應的元素是否相等。如果發現不相等,則其左邊的數組一定已經“亂了”,所以第一個亂掉的一定在左邊的結果集中,且包含當前元素,r=mid。反之,結果集在右邊,但是不包含當前元素,r=mid+1。

class Solution {
    public int missingNumber(int[] nums) {
        if(nums==null || nums.length==0)
        {
            return 0;
        }
        //二分的條件就是下標和下標對應的元素是否相等
        //對於某個錯排的元素,它的左邊都是下標和元素值相等的,右邊都是不相等的

        int l=0;
        int r=nums.length-1;
        while(l<r)
        {
            int mid=(l+r)>>1;
            if(nums[mid]!=mid)
            {
                r=mid;
            }else
            {
                l=mid+1;
            }
        }
        if(nums[l]==l) return ++l;
        return l;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章