1. 程式人生 > 實用技巧 >LeetCode-消失的數字

LeetCode-消失的數字

非商業,LeetCode連結附上:

https://leetcode-cn.com/problems/missing-number-lcci/

進入正題。

題目:

陣列nums包含從0n的所有整數,但其中缺了一個。請編寫程式碼找出那個缺失的整數。你有辦法在O(n)時間內完成嗎?

示例:

示例 1:

輸入:[3,0,1]

輸出:2

示例 2:

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

輸出:8

程式碼實現:

public int missingNumber(int[] nums) {

        int res = 0;
        for (int i = 0; i < nums.length; i++) {
            res ^= i;
            res ^= nums[i];
        }
        res ^= nums.length;//由於缺少一個數,for迴圈中的少做了一次 "res ^= i" 的操作,在這裡補上

        return res;
}
//時間複雜度O(n),空間複雜度O(1)

分析:

主要利用了“異或”的性質:

  1. 0和任何值的異或等於本身,即:A ^ 0 = A
  2. 異或本身等於0,即 A ^ A = 0
  3. 異或滿足結合律,即 A ^ B ^ C = A ^ ( B ^ C)
  4. 異或滿足交換律,即 A ^ B = B ^ A

附註:

https://leetcode-cn.com/problems/missing-number-lcci/solution/onshi-jian-fu-za-du-o1kong-jian-fu-za-du-shi-xian-/

--End