数组中有两种数出现了奇数次,其他数都出现了偶数次,分别找出出现奇数次的数
2021-04-25 15:26
标签:info ++ 奇数 length 如何 alt sys 异或 == 运行结果: 1 4 如何提取二进制最右的1 数组中有两种数出现了奇数次,其他数都出现了偶数次,分别找出出现奇数次的数 标签:info ++ 奇数 length 如何 alt sys 异或 == 原文地址:https://www.cnblogs.com/pxy-1999/p/13258334.htmlpublic static void printOddTimesNum2(int[] arr) {
int eor = 0;
for (int c : arr) {
eor ^= c;
}
//eor = a^b
//eor != 0;
//eor二进制位必然有一位等于1
int rightOne = eor & (~eor + 1); //原码&补码 = 提取最右1位的 1
int eor1 = 0;
for (int i = 0; i ) {
if ((arr[i] & rightOne) == 1) { //找出最右1位是1的数做异或运算 注意:出现偶数次的数异或后=0
eor1 ^= arr[i]; //此时eor1 = 出现奇次数的其中一个
}
}
int otherOdd = eor1 ^ eor;
System.out.println(eor1 + " " + otherOdd);
}
//int[] arr2 = {1, 2, 2, 3, 1, 4, 1, 3, 3, 3, 4, 4, 4, 4};
文章标题:数组中有两种数出现了奇数次,其他数都出现了偶数次,分别找出出现奇数次的数
文章链接:http://soscw.com/index.php/essay/79412.html