[Python] 一つだけの数字を見つける

問題

配列の中で、他の数字は全て2つずつある中で、唯一1つだけの数字を見つけなさい。

例えば、[1, 2, 3, 3, 1, 2, 4]という配列であれば、4が答えになります。

解説

Single Number Problemという有名な問題で、ベストな解き方は、XORを使います。

Find the element that appears once in an array where every other element appears twice

確かにそうなるけど、へーって思いました。

[1, 2, 3, 3, 1, 2, 4] で考えると、

  1 ^ 2 ^ 3 ^ 3 ^ 1 ^ 2 ^ 4 
= (1 ^ 1) ^ (2 ^ 2) ^ (3 ^ 3) ^ 4
= 4

と、4が答えになります。

Pythonで書くと、以下のようになります。

nums = [1, 2, 3, 3, 1, 2, 4]
ans = 0
for i in range(len(nums)):
    ans ^= nums[i]
print(ans)