给你一个整数数组 nums
,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。
本题也是通过异或的相关知识来解决,优势对位运算的进一步了解
从右往左位数中,异或值为一的可以分成两组
n&-n得到n的位级表示中最低的那一位
class Solution {
public int[] singleNumber(int[] nums) {
int n=0;
for(int num:nums){
n^=num;
}
int m=n&(-n);
int[] ans = new int[2];
for (int num : nums) {
if ( (num & m) == 0) {
ans[0] ^= num;
} else {
ans[1] ^= num;
}
}
return ans;
}
}