61.数组中只出现一次的两个数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。
请写程序找出这两个只出现一次的数字。
你可以假设这两个数字一定存在。
数据范围:
数组长度 [1,1000]。
样例:
输入:[1,2,3,3,4,4]
输出:[1,2]
代码:
class Solution {
public int[] findNumsAppearOnce(int[] nums) {
//初始化一个变量用于存储所有数字的异或结果
int temp = 0;
//遍历数组,计算数字的异或结果
//计算后的结果temp即为x^y的结果,我们需要将temp分离,找到x,y
for(int i = 0;i<nums.length;i++)temp^=nums[i];
//找到temp中第一个为1的位,这个位可以用来区分两个不同的数字
int k = 0;
while((temp>>k&1)==0)k++;
//初始化两个变量x,y来存储最终结果
int x = 0,y = 0;
//遍历数组,根据第k位是否为1将数组分为两部分,并计算异或结果
for(int i = 0;i<nums.length;i++){
if((nums[i]>>k&1)==1)x^=nums[i];
}
//另一个数字可以通过异或temp和x得到
y = x^temp;
//返回结果数组
return new int[]{x,y};
}
}