问题描述
简要思路
暴力解很简单,但是会超时,这题主要就在于时间复杂度的优化。
一一计算每一位的 0、1 数对,每个 0、1 会使汉明距离加 1 。
代码
class Solution {
public:
int totalHammingDistance(vector<int>& nums) {
int n = nums.size();
int res = 0;
for(int i = 30; i >= 0; i--){
int zero_num = 0;
int one_num = 0;
for(int j = 0; j < n; j++){
if((nums[j] >> i & 1) == 0) zero_num++;
else one_num++;
}
res += zero_num * one_num;
}
return res;
}
};