class Solution(object): def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ # Constraints: # Time: O(n) # everything is being done within the array # Space: O(1) # can use variables a = 0 for num in nums: a ^= num return a
Explanation
We’ll be utilizing bitwise operator, XOR. It essentially determines if two numbers are different. If the numbers are different, it returns 1, else 0
At first look, it seems like it isn’t too helpful since if we use [1, 2, 3, 2, 1] using XOR isn’t too intuitive.
However, XOR uses the associative property; meaning that 1 \oplus 2 \oplus 3 \oplus 2 \oplus 1$ = $1 \oplus 1 \oplus2 \oplus 2 \oplus 3 = 0 \oplus 0\oplus 3 = 0 \oplus 3 = 3
This is because we aren’t actually using the base 10 representation of the numbers, but rather their binary representation
We’ll set a = 0, iterate through nums and call xor on a and num