- 汉明距离总和
两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。
计算一个数组中,任意两个数之间汉明距离的总和。
class Solution {
public:
int totalHammingDistance(vector<int>& nums) {
long sum = 0;
while(!allZero(nums)){
sum += getSum(nums);
divide(nums);
}
return sum;
}
long getSum(vector<int>& nums){
vector<long>value(2);
for(int n = 0; n < nums.size(); n++){
value[nums[n] & 1]++;
}
return value[0] * value[1];
}
void divide(vector<int>& nums){
for(int n = 0; n < nums.size(); n++)
nums[n] /= 2;
}
bool allZero(vector<int>& nums){
for(auto n : nums){
if(n != 0)
return false;
}
return true;
}
};
经验:
1、利用bitmap计算,降低复杂度
2、右移操作似乎有点奇怪,不一定变成0.