148 数组值只出现了一次的数字(两个数字出现了奇数次/其它数字出现偶数次)
Table of Contents

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
*/