题目:
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
解题过程:
异或运算
题解见官方
class Solution {
public int[] singleNumbers(int[] nums) {
int res=0;
for(int i : nums){
res ^= i;
}
int h = 1;
while((h&res)==0){
h<<=1;
}
int a=0, b=0;
for(int i : nums){
if((i&h)!=0){
a ^= i;
}else{
b ^= i;
}
}
return new int[]{a,b};
}
}