LeetCode-消失的數字
阿新 • • 發佈:2020-11-28
非商業,LeetCode連結附上:
https://leetcode-cn.com/problems/missing-number-lcci/
進入正題。
題目:
陣列nums
包含從0
到n
的所有整數,但其中缺了一個。請編寫程式碼找出那個缺失的整數。你有辦法在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)
分析:
主要利用了“異或”的性質:
- 0和任何值的異或等於本身,即:A ^ 0 = A
- 異或本身等於0,即 A ^ A = 0
- 異或滿足結合律,即 A ^ B ^ C = A ^ ( B ^ C)
- 異或滿足交換律,即 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