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