这道题我最开始直接算每两个数字的hamming距离,超时了。
然后看了discuss,发现可以用每一位的1的个数乘以0的个数累加,牛逼啊!
最高答案用了32次方,其实31次方就够了,因为给了最大值是10^9。
int totalHammingDistance(vector<int>& nums) {
int num = nums.size();
int result = 0;
for (int i = 0;i<31;i++) {
int oneCount = 0;
for (int j = 0;j<num;j++) {
if ((nums[j]>>i)&1) oneCount++;
}
result += oneCount*(num - oneCount);
}
return result;
}