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;
}
}