要求:一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
class Solution {
public int[] singleNumbers(int[] nums) {
int sum=0;
for ( int num:nums) {
sum^=num;//得到异或结果,即为不相同两个数的异或结果sum
}
int flag=sum&(-sum);
int r[]=new int[2];
for (int s:nums) {
if ((s&flag)==0){//分成两个组进行异或,每组异或后的结果就是不相同两个数的其中之一
r[0]^=s;
}else {
r[1]^=s;
}
}
return r;
}
}