268. Missing Number

APPROACH: BINARY SEARCH

其實二分搜索很多地方都又變種,有時候不一定是要「找到目標」(nums[mid] == value那種),比如這個,思路這樣的:

  1. 排序后,nums[mid] 如果等于mid,說明缺少的那個數(shù)在mid的右邊,那么left = mid + 1。如:
    0123467
  2. 如果nums[mid]>mid,說明缺少的那個數(shù)在mid左邊,那么right = mid;

注意終止條件,left<right,而不是標準二分的<=。因為left == right 的情形就已經是找到了。

public int missingNumber(int[] nums) { //binary search
    Arrays.sort(nums);
    int left = 0, right = nums.length, mid= (left + right)/2;
    while(left<right){
        mid = (left + right)/2;
        if(nums[mid]>mid) right = mid;
        else left = mid+1;
    }
    return left;
}

APPROACH: SUM

我想到了這個方法。

        if (nums == null || nums.length == 0) return -1;
        int total = 0;
        for (int i : nums) {
            total += i;
        }
        return (1 + nums.length) * (nums.length) / 2 - total;

//or:
    int len = nums.length;
    int sum = (0+len)*(len+1)/2;
    for(int i=0; i<len; i++)
        sum-=nums[i];
    return sum;

APPROACH : XOR

我又沒想到。明明跟SINGLE NUMBER和389那么像。。還是用得少。注意0異或任何數(shù)都等于0。

        //0異或任何數(shù)都等于0
        int res = 0;
        for (int i = 0; i < nums.length; i++) {
            res ^= nums[i] ^ i;
        }
        return res ^ (nums.length );
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容