Single Number
Problem
https://leetcode.com/problems/single-number/
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 * 104Each element in the array appears twice except for one element which appears only once.
Pattern
Bit Manipulation
Approaches
Explanation
Consider what happesn when we take the bitwise XOR of two integers that are
the same. Because the binary represenations are identical, the bitwise XOR
at every bit will be 0. Now consider what happens if we take the bitwise
XOR 0 ^ u where \(u\) is the unique integer in nums. The result
is going to be \(u\). Becuase bitwise XOR is commutative and
associative, we can bitwise XOR all the numbers in nums regardless of
order and obtain the unique integer.
Code
def singleNumber(nums: list[int]) -> int:
"""Return the element that appears only once."""
result = 0
for num in nums:
result ^= num
return result
Test
>>> from single_number__bit_manipulation import singleNumber
>>> singleNumber([2, 2, 1])
1
>>> singleNumber([4, 1, 2, 1, 2])
4
>>> singleNumber([1])
1
Complexity
\(n\) is the number of elements in nums
Measure |
Complexity |
Notes |
|---|---|---|
Time |
\(O(n)\) |
one pass through the array |
Auxiliary Space |
\(O(1)\) |
- single_number__bit_manipulation.singleNumber(nums: list[int]) int
Return the element that appears only once.