题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
public static void main(String[] args) {
int[] nums = {7, 6, 7, 5};
int[] nums1 = {0};
int[] nums2 = {0};
FindNumsAppearOnce(nums, nums1, nums2);
System.out.println("第一个数:" + nums1[0] + "第二个数:" + nums2[0]);
}
public static void FindNumsAppearOnce(int[] nums, int num1[], int num2[]) {
int diff = 0;
//得到所有数字异或的结果,根据异或的性质,该结果就是这两个不相同的数字异或的结果
for (int num : nums) {
diff ^= num;
}
//得到这个结果最末尾为1所表示的数字,表示在该位这两个数所表示的值不相同
diff &= -diff;
//必有一个数字和这个数字相与的结果为0(因为一个数字在该位为0,一个数字在该位为1)
for (int num : nums) {
if ((num & diff) == 0) {
num1[0] ^= num;
} else {
num2[0] ^= num;
}
}
}