由于数组除了一个目标数外,其余都出现k次。从位运算的角度出发,int类型总共有32位,bitIndex表示当前处理的位。将数组中每一个数据在bitIndex位置上的值进行求和计算取得sum,由于大部分重复了k次,所以sum%k就可以获得当前位置的目标数的值。
public class Solution {
    public int foundOnceNumber (int[] arr, int k) {
        int bitIndex = 0, result=0, tmp=0;
        while(bitIndex<32){
            tmp = 0;
            for(int i=0; i<arr.length; i++){
                tmp += arr[i]>>bitIndex & 1;
            }
            result += (tmp%k)<<bitIndex++;
        }
        return result;
    }
}