LeetCode题解——汉明距离总和
- 题目介绍
- 解题思路
- 这题是https://blog.csdn.net/yxh_1_/article/details/117331121?spm=1001.2014.3001.5501的一个升级版
- 第一种暴力解法,将num数组进行双重循环,将两两带入到之前的弱版接口获取不同位数的和,但这种方法会超时
- 第二种方式,我们将循环的目标放到每一位上,算出num数组里面第一位为1的元素数量n,那么为0的就是len-n
- 那么光第一位上不同的情况就有n*(len-n)依次在遍历其它的位
- 代码示例
class Solution {
public:
int totalHammingDistance(vector<int> &nums) {
int res = 0;
int len = nums.size();
for (int i = 0; i < 30; ++i) {
int count = 0; //代表有多少1
for (int val : nums) {
count += (val >> i) & 1;
}
res += count * (len - count);
}
return res;
}
};