1. 程式人生 > 實用技巧 >LeetCode-0到n-1中缺失的數字

LeetCode-0到n-1中缺失的數字

非商業,LeetCode連結附上:

https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/

進入正題。

題目:

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

限制:

1 <= 陣列長度 <= 10000

程式碼實現:

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;
}
//時間複雜度O(logN),空間複雜度O(1)

分析:

根據題意,“遞增排序陣列”,首先考慮二分法查詢目標元素;

目標元素會在值和索引相等的右側陣列出現,因此記錄並更新對應的索引,直到陣列都遍歷完。

--End