Given a non-empty array of integers, every element appears twice except for one. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Example 1:

Input: [2, 2, 1]

Output: 1

Example 2:

Input: [4, 1, 2, 1, 2]

Output: 4

Solution

from typing import List

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        result = 0

        for i in range(len(nums)):
            result ^= nums[i]

        return result

Test Cases

test = Solution()
answer = test.singleNumber([1,1,2,4,2,3,3])
assert answer == 4

answer = test.singleNumber([1])
assert answer == 1
print('All Passed!')

Big O Analysis

Space Complexity: O(1)

Time Complexity: O(N)