260. Single Number III
Given an array of numbers nums
, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
Example:
Input: [1,2,1,3,2,5]
Output: [3,5]
Note:
The order of the result is not important. So in the above example,
[5, 3]
is also correct.Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
// Two pass method with XOR Bit Manipulation
vector<int> singleNumber(vector<int>& nums) { // time: O(n); space: O(1)
int diff = accumulate(nums.begin(), nums.end(), 0, bit_xor<int>());
diff &= -diff; // -diff = ~diff + 1
vector<int> res(2, 0);
for (int num : nums) {
if ((num & diff) == 0) res[0] ^= num;
else res[1] ^= num;
}
return res;
}
Last updated
Was this helpful?