Problem
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?
Code
class Solution {
public int[] singleNumber(int[] nums) {
int t = 0;
for (int num : nums) {
t = t ^ num;
}
t = t - (t & (t - 1));
int n0 = 0, n1 = 0;
for (int num : nums) {
if ((num & t) == 0) {
n0 = n0 ^ num;
} else {
n1 = n1 ^ num;
}
}
if (n0 < n1) {
return new int[]{n0, n1};
}
return new int[]{n1, n0};
}
}