148 数组值只出现了一次的数字(两个数字出现了奇数次/其它数字出现偶数次)
ac
给定一个数字arr,其中只有两个数字出现了奇数次,其它数字都出现了偶数次,按照从小到大顺序输出这两个数。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static Scanner sc = new Scanner(System.in);
public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public static long mod = (long)Math.pow(2,29);
public static void main(String[] args) throws Exception {
int n = sc.nextInt();
int[] arr = new int[n];
int xorAns = 0;
for(int i=0;i<n;i++){
int val = sc.nextInt();
arr[i] = val;
xorAns = xorAns ^ val;
}
int bitOnePos = 0;
for(int i=31;i>=0;i--){
if(((xorAns >> i) & 1) == 1){
bitOnePos = i;
break;
}
}
int xorAns1 = 0;
int xorAns2 = 0;
for(int i=0;i<n;i++){
if(((arr[i] >> bitOnePos) & 1) == 1){
xorAns1 = xorAns1 ^ arr[i];
}else {
xorAns2 = xorAns2 ^ arr[i];
}
}
if(xorAns1 < xorAns2) {
System.out.println(xorAns1 + " " + xorAns2);
}else {
System.out.println(xorAns2 + " " + xorAns1);
}
}
}
/*
异或处理
4
1 1 2 3
2 3
6
11 22 11 23 23 45
22 45
*/