給定一個包含 [0, n] 中 n 個數的數組 nums ,找出 [0, n] 這個范圍內沒有出現在數組中的那個數。
示例 1:
輸入:nums = [3,0,1]
輸出:2
解釋:n = 3,因為有 3 個數字,所以所有的數字都在范圍 [0,3] 內。2 是丟失的數字,因為它沒有出現在 nums 中。
示例 2:
輸入:nums = [0,1]
輸出:2
解釋:n = 2,因為有 2 個數字,所以所有的數字都在范圍 [0,2] 內。2 是丟失的數字,因為它沒有出現在 nums 中。
找缺失數、找出現一次數都是異或的經典應用。
我們可以先求得 [1,n] 的異或和 ans,然後用 ans 對各個nums[i] 進行異或。
這樣最終得到的異或和表達式中,只有缺失元素出現次數為 11 次,其余元素均出現兩次(x⊕x=0),即最終答案 ans 為缺失元素。
注意:列表中元素是從0到n
class Solution:
def missingNumber(self, nums: List[int]) -> int:
ans = 0
# 元素是0到n,要取到n,Python中的range(n),是作閉右開的,包括n
for i in range(len(nums)+1):
ans ^= i
for j in nums:
ans ^=j
return ans