int[] arr = new int[]{7, 8, 9, 11, 11, 11, 11, 7, 8, 7};
int eor = 0;
for (int i : arr) {
eor ^= i;
}
//假设所求两数为a,b 此时 eor = a^b;
//求eor二级制最右侧1
int right = eor & (-eor);
//遍历数组,找出数组中最右侧1与right相同的数,取这批数做异或操作
int a = 0;
for (int i : arr) {
if ((right & i) != 0) {
a ^= i;
}
}
int b = eor ^ a;
System.out.println("a = " + a);
System.out.println("b = " + b);
一个数组中有两种数出现了奇数次,其他的数都出现了偶数次,怎么找到并打印这两个数。
最新推荐文章于 2022-05-17 16:28:02 发布