位运算

还是用位运算的思想,不能直接相异,因为不知k的奇偶,所以需要将每一个数的二进制位个数求和,如果不是k的倍数证明答案有该二进制位。

alt

import java.util.*;
public class Solution {
    public int foundOnceNumber (int[] arr, int k) {
        // write code here
        int[] binarySum = new int[32];
        int i,j,ans=0;
        
        for(i=0;i<32;i++){
            for(j=0;j<arr.length;j++){
                if(((arr[j]>>i)&1)== 1)binarySum[i]++;
            }
        }
        
        for(i=0;i<32;i++){
            if(binarySum[i]%k!=0)ans+=1<<i;
        }
        return ans;
    }
}