题解 | #数组中只出现一次的数(其它数出现k次)#
数组中只出现一次的数(其它数出现k次)
http://www.nowcoder.com/practice/5d3d74c3bf7f4e368e03096bb8857871
按位计算所有数组在各个位数上1的个数,并取模k, 结果是0或者1,另外高位数是1,是负数。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param arr int一维数组
* @param k int
* @return int
*/
public int foundOnceNumber (int[] arr, int k) {
int res = 0;
for (int i = 0; i < 32; i++) {
int sum1 = 0;
for(int x : arr) {
sum1 += (x >> i ) & 1;
}
int tmp = sum1 % k;
if (i == 31 && tmp > 0) {
res -= 1 << 31;
} else {
res |= tmp << i;
}
}
return res;
}
}

