题解 | #数组中只出现一次的数(其它数出现k次)#
数组中只出现一次的数(其它数出现k次)
http://www.nowcoder.com/practice/5d3d74c3bf7f4e368e03096bb8857871
如果k个相同的k进制数进行无进位相加,相加的结果一定是每一位上都是0的k进制数。
所有的数都是32位整型,讲所有数都转为二进制数,计算所有数在32位每一位的和。如果该位可以被k整除,则表示那个只出现一次的数在该位为0;如果该位整除不为0, 则表示那个只出现一次的数在该位为1。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param arr intvector
* @param k int
* @return int
*/
int foundOnceNumber(vector<int>& arr, int k) {
// write code here
int res = 0;
for(int i = 0; i < 32; i++){
int sum = 0;
for(auto num: arr){
sum += num >> i & 1;
}
if(sum % k != 0){
res += 1<<i;
}
}
return res;
}
};