Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 70 additions & 1 deletion
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‎

Lines changed: 68 additions & 1 deletion
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
### **...**
Lines changed: 18 additions & 0 deletions
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+
};
Lines changed: 13 additions & 0 deletions
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+
}
Lines changed: 10 additions & 20 deletions
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
}
Lines changed: 13 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /