Given a non-empty array of integers nums
, every element appears twice except for one. Find that single one.
You must implement a solution with a linear runtime complexity and use only constant extra space.
Example 1:
Input: nums = [2,2,1]
Output: 1
Example 2:
Input: nums = [4,1,2,1,2]
Output: 4
Example 3:
Input: nums = [1]
Output: 1
Constraints:
1 <= nums.length <= 3 * 104
-3 * 104 <= nums[i] <= 3 * 104
- Each element in the array appears twice except for one element which appears only once.
My Solution:
from collections import Counter class Solution: def singleNumber(self, nums: List[int]) -> int: if len(nums) == 1: return nums[0] counter = Counter(nums) for num in counter: if counter[num] == 1: return num
ChatGPT's Solution:
class Solution: def singleNumber(self, nums: List[int]) -> int: result = 0 for num in nums: result ^= num return result
You can solve this problem using the XOR bitwise operation. The key idea is:
-
a ^ a = 0
(any number XOR itself is 0) -
a ^ 0 = a
(any number XOR 0 is the number itself) -
XOR is commutative and associative, so the order doesn’t matter.
So if you XOR all the numbers in the array, the ones that appear twice will cancel out, and you’ll be left with the one that appears only once.