二进制每一位分开计算,当前位有n个1,则有size-n个0,则不一样个数为n*(size-n)。
class Solution {
public:
int totalHammingDistance(vector<int>& nums) {
int visit[32] = {0};
for (auto &index:nums) {
for (int i = 0; i < 32; i++)
if (index & (1 << i))
visit[i] ++;
}
int ans = 0;
for (auto &index:visit) {
ans += index * (nums.size() - index);
}
return ans;
}
};
该博客介绍了一种计算二进制数组中所有数字汉明距离总和的方法。通过遍历每个数字的二进制表示,统计每位上1的出现次数,然后根据公式n*(size-n)计算汉明距离的贡献,最后汇总得出总和。
2170

被折叠的 条评论
为什么被折叠?



