一个数组中有两种数出现了奇数次,其它数都出现了偶数次,怎么找到并打印这两种数
package com.harrison.Class01;
public class Code08_TwoNumOddTimes {
public static void printOddTimesNum(int[] arr) {
int eor=0;
for(int i=0; i<arr.length; i++) {
eor^=arr[i];
}
//eor==a^b && eor!=0
//提取出最右侧的1
int rightOne=eor&(~eor+1);
int onlyOne=0;//eor'
for(int i=0; i<arr.length; i++) {
//与上一个不等于0的数并且结果不等于0,则这个数一定某个位上有1
if((arr[i]&rightOne)!=0) {
onlyOne^=arr[i];
}
}
System.out.println(onlyOne+" "+(onlyOne^eor));
}
public static void main(String[] args) {
int[] arr= {
4,3,4,9,4,3,2,2,1,4,9,1,3,2};
printOddTimesNum(arr);
}
}