-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path477. Total Hamming Distance.cpp
More file actions
61 lines (50 loc) · 1.65 KB
/
477. Total Hamming Distance.cpp
File metadata and controls
61 lines (50 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//link: https://leetcode.com/problems/total-hamming-distance/
/*
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Now your job is to find the total Hamming distance between all pairs of the given numbers.
Example:
Input: 4, 14, 2
Output: 6
Explanation: In binary representation, the 4 is 0100, 14 is 1110, and 2 is 0010 (just
showing the four bits relevant in this case). So the answer will be:
HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2 + 2 = 6.
Note:
Elements of the given array are in the range of 0 to 10^9
Length of the array will not exceed 10^4.
*/
/*
Result:
Runtime: 80 ms, faster than 31.21% of C++ online submissions for Total Hamming Distance.
Memory Usage: 8.2 MB, less than 100.00% of C++ online submissions for Total Hamming Distance.
*/
class Solution {
public:
int totalHammingDistance(vector<int>& nums) {
vector<int> v(30, 0);
for(int i = 0; i < nums.size(); i ++){
int cur = nums[i];
int index = 0;
while(cur != 0){
v[index] += (cur % 2);
index ++;
cur >>= 1;
}
}
int ans = 0;
for(int i = 0; i < nums.size(); i ++){
int cur = nums[i];
int index = 0;
while(cur != 0){
if(cur % 2){
ans += (nums.size() - v[index]);
}
// else{
// ans += v[index];
// }
index ++;
cur >>= 1;
}
}
return ans;
}
};