/**
* 存在数组arr,其中有N个数,每个数出现偶数次,存在2个数,每个数出现了奇数次。找到这两个出现奇数次的数
*
* @param arr
*/
public static void printOddTimesNum(int[] arr) {
// 1.先将数组内全部的数进行异或运算,找到两个出现奇数次的数的异或结果
// 2.找到两个出现奇数次的数的异或结果中最右侧的1
// 3.使用找到的1将数组分成两组,一组对应位为1,一组对应位为0,此时两个出现奇数次的数会分别出现在两组中,、
int eor = 0;
for (int i = 0; i < arr.length; i++) {
eor ^= arr[i];
}
int rightOne = eor & (~eor + 1);
int onlyOne = 0;
for (int i : arr) {
System.out.println(i & rightOne);
if ((i & rightOne) == 0) {
onlyOne ^= i;
}
}
System.out.println(onlyOne + " " + (eor ^ onlyOne));
}
存在数组arr,其中有N个数,每个数出现偶数次,存在2个数,每个数出现了奇数次。找到这两个出现奇数次的数
最新推荐文章于 2024-11-09 21:51:15 发布