https://leetcode.com/problems/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?
使用异或
1、求得两个不同元素的异或值
2、找到两个不同元素的不同位
3、根据不同位划分分组,将同组元素异或得到唯一元素值,因为相同的元素值一定会分到同一个分组,最后异或会将唯一的元素值得出。
class num260 {
public int[] singleNumber(int[] nums) {
int sum = 0;
for(int num:nums) sum ^= num;
int[] res = new int[2];
sum &= -sum;
for(int num:nums){
if((sum & num) == 0) res[0] ^= num;
else res[1] ^= num;
}
return res;
}
}