Skip to content

Commit 5a569cf

Browse files
committed
feat: add solutions to lc problem: No.0477
No.0477.Total Hamming Distance
1 parent 2c432cc commit 5a569cf

File tree

6 files changed

+192
-22
lines changed

6 files changed

+192
-22
lines changed

solution/0400-0499/0477.Total Hamming Distance/README.md

+70-1
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,91 @@ HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2
4343

4444
<!-- 这里可写通用的实现逻辑 -->
4545

46+
**方法一:位运算**
47+
4648
<!-- tabs:start -->
4749

4850
### **Python3**
4951

5052
<!-- 这里可写当前语言的特殊实现逻辑 -->
5153

5254
```python
53-
55+
class Solution:
56+
def totalHammingDistance(self, nums: List[int]) -> int:
57+
ans = 0
58+
for i in range(31):
59+
a = b = 0
60+
for v in nums:
61+
t = (v >> i) & 1
62+
if t:
63+
a += 1
64+
else:
65+
b += 1
66+
ans += a * b
67+
return ans
5468
```
5569

5670
### **Java**
5771

5872
<!-- 这里可写当前语言的特殊实现逻辑 -->
5973

6074
```java
75+
class Solution {
76+
public int totalHammingDistance(int[] nums) {
77+
int ans = 0;
78+
for (int i = 0; i < 31; ++i) {
79+
int a = 0, b = 0;
80+
for (int v : nums) {
81+
int t = (v >> i) & 1;
82+
a += t;
83+
b += t ^ 1;
84+
}
85+
ans += a * b;
86+
}
87+
return ans;
88+
}
89+
}
90+
```
91+
92+
### **C++**
93+
94+
```cpp
95+
class Solution {
96+
public:
97+
int totalHammingDistance(vector<int>& nums) {
98+
int ans = 0;
99+
for (int i = 0; i < 31; ++i)
100+
{
101+
int a = 0, b = 0;
102+
for (int& v : nums)
103+
{
104+
int t = (v >> i) & 1;
105+
a += t;
106+
b += t ^ 1;
107+
}
108+
ans += a * b;
109+
}
110+
return ans;
111+
}
112+
};
113+
```
61114
115+
### **Go**
116+
117+
```go
118+
func totalHammingDistance(nums []int) int {
119+
ans := 0
120+
for i := 0; i < 31; i++ {
121+
a, b := 0, 0
122+
for _, v := range nums {
123+
t := (v >> i) & 1
124+
a += t
125+
b += t ^ 1
126+
}
127+
ans += a * b
128+
}
129+
return ans
130+
}
62131
```
63132

64133
### **...**

solution/0400-0499/0477.Total Hamming Distance/README_EN.md

+68-1
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,80 @@ HammingDistance(4, 14) + HammingDistance(4, 2) + HammingDistance(14, 2) = 2 + 2
4343
### **Python3**
4444

4545
```python
46-
46+
class Solution:
47+
def totalHammingDistance(self, nums: List[int]) -> int:
48+
ans = 0
49+
for i in range(31):
50+
a = b = 0
51+
for v in nums:
52+
t = (v >> i) & 1
53+
if t:
54+
a += 1
55+
else:
56+
b += 1
57+
ans += a * b
58+
return ans
4759
```
4860

4961
### **Java**
5062

5163
```java
64+
class Solution {
65+
public int totalHammingDistance(int[] nums) {
66+
int ans = 0;
67+
for (int i = 0; i < 31; ++i) {
68+
int a = 0, b = 0;
69+
for (int v : nums) {
70+
int t = (v >> i) & 1;
71+
a += t;
72+
b += t ^ 1;
73+
}
74+
ans += a * b;
75+
}
76+
return ans;
77+
}
78+
}
79+
```
80+
81+
### **C++**
82+
83+
```cpp
84+
class Solution {
85+
public:
86+
int totalHammingDistance(vector<int>& nums) {
87+
int ans = 0;
88+
for (int i = 0; i < 31; ++i)
89+
{
90+
int a = 0, b = 0;
91+
for (int& v : nums)
92+
{
93+
int t = (v >> i) & 1;
94+
a += t;
95+
b += t ^ 1;
96+
}
97+
ans += a * b;
98+
}
99+
return ans;
100+
}
101+
};
102+
```
52103
104+
### **Go**
105+
106+
```go
107+
func totalHammingDistance(nums []int) int {
108+
ans := 0
109+
for i := 0; i < 31; i++ {
110+
a, b := 0, 0
111+
for _, v := range nums {
112+
t := (v >> i) & 1
113+
a += t
114+
b += t ^ 1
115+
}
116+
ans += a * b
117+
}
118+
return ans
119+
}
53120
```
54121

55122
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
int totalHammingDistance(vector<int>& nums) {
4+
int ans = 0;
5+
for (int i = 0; i < 31; ++i)
6+
{
7+
int a = 0, b = 0;
8+
for (int& v : nums)
9+
{
10+
int t = (v >> i) & 1;
11+
a += t;
12+
b += t ^ 1;
13+
}
14+
ans += a * b;
15+
}
16+
return ans;
17+
}
18+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
func totalHammingDistance(nums []int) int {
2+
ans := 0
3+
for i := 0; i < 31; i++ {
4+
a, b := 0, 0
5+
for _, v := range nums {
6+
t := (v >> i) & 1
7+
a += t
8+
b += t ^ 1
9+
}
10+
ans += a * b
11+
}
12+
return ans
13+
}
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,15 @@
11
class Solution {
22
public int totalHammingDistance(int[] nums) {
3-
4-
if (nums == null || nums.length < 2) {
5-
return 0;
6-
}
7-
8-
int[] m = new int[31];// 存储对应位数,有多少个0
9-
for(int num : nums) {
10-
for(int i = 0; i < 31; i++) {
11-
if ((num & (1 << i)) == 0) {
12-
m[i]++;
13-
}
14-
}
3+
int ans = 0;
4+
for (int i = 0; i < 31; ++i) {
5+
int a = 0, b = 0;
6+
for (int v : nums) {
7+
int t = (v >> i) & 1;
8+
a += t;
9+
b += t ^ 1;
10+
}
11+
ans += a * b;
1512
}
16-
17-
int result = 0;
18-
for(int i = 0; i < 31; i++) {
19-
result += m[i] * (nums.length - m[i]);
20-
}
21-
22-
return result;
23-
13+
return ans;
2414
}
2515
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def totalHammingDistance(self, nums: List[int]) -> int:
3+
ans = 0
4+
for i in range(31):
5+
a = b = 0
6+
for v in nums:
7+
t = (v >> i) & 1
8+
if t:
9+
a += 1
10+
else:
11+
b += 1
12+
ans += a * b
13+
return ans

0 commit comments

Comments
 (0)