第一思路是O(32n^2), 二重循环枚举计算。
实际上仔细看数组中的相同位的元素,我们通过观察,直接可以一次遍历就计算出该位的汉明距离。
0 : 0000
3 : 0011
6 : 0110
9 : 1001
class Solution {
public:
int totalHammingDistance(vector<int>& nums) {
// O(32n^2)
int res = 0;
for(int i = 0; i < 32; i++){
int cnt = 0;
for(auto num : nums){
if (num >> i & 1){
cnt++;
}
}
res += cnt * (nums.size() - cnt);
}
return res;
}
};