劍指 Offer 53 - II. 0~n-1中缺失的數字(二分法)1

星河依然滾燙發表於2020-12-15

一個長度為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

解法一:二分法

  • 時間複雜度 O(logN): 二分法為對數級別複雜度。
  • 空間複雜度 O(1): 幾個變數使用常數大小的額外空間。
class Solution {
    public int missingNumber(int[] nums) {
        int i = 0, j = nums.length - 1;
        while(i <= j) {
            int m = (i + j) / 2;
            if(nums[m] == m) i = m + 1;
            else j = m - 1;
        }
        return i;
    }
}

相關文章