一个数组中有两种数出现了奇数次,其它数都出现了偶数次,怎么找到并打印这两种数

一个数组中有两种数出现了奇数次,其它数都出现了偶数次,怎么找到并打印这两种数

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);
	}
}

Guess you like

Origin blog.csdn.net/weixin_44337241/article/details/121477825