由于数组除了一个目标数外,其余都出现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;
}
} 


京公网安备 11010502036488号