0%

477. Total Hamming Distance

O(n)
遍历每个数的每一位,统计每一位0和1的个数,累加乘积即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
int totalHammingDistance(vector<int> &nums) {
int res = 0;
for (int i = 0, n = nums.size(); i < 32; i++) {
int cnt = 0;
for (int x : nums) {
cnt += (x >> i) & 1;
}
res += cnt * (n - cnt);
}
return res;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
int totalHammingDistance(vector<int>& nums) {
int ret = 0;
int not_zero = 1;
while (not_zero) {
not_zero = 0;
int counter[2] = {0};
for (auto& num : nums) {
++counter[num & 1];
num >>= 1;
not_zero += (num != 0);
}
ret += (counter[0] * counter[1]);
}
return ret;
}
};