Skip to content

Commit bbb9d0a

Browse files
committed
feat: add solutions to lc problem: No.1835
No.1835.Find XOR Sum of All Pairs Bitwise AND
1 parent b812355 commit bbb9d0a

File tree

6 files changed

+146
-2
lines changed

6 files changed

+146
-2
lines changed

solution/1800-1899/1835.Find XOR Sum of All Pairs Bitwise AND/README.md

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,22 +47,88 @@
4747

4848
<!-- 这里可写通用的实现逻辑 -->
4949

50+
**方法一:位运算**
51+
52+
假设数组 `arr1` 的元素分别为 $a_1, a_2, \cdots, a_n$,数组 `arr2` 的元素分别为 $b_1, b_2, \cdots, b_m$,那么题目答案为:
53+
54+
$$
55+
\begin{aligned}
56+
\text{ans} &= (a_1 \wedge b_1) \oplus (a_1 \wedge b_2) ... (a_1 \wedge b_m) \\
57+
&\quad \oplus (a_2 \wedge b_1) \oplus (a_2 \wedge b_2) ... (a_2 \wedge b_m) \\
58+
&\quad \oplus \cdots \\
59+
&\quad \oplus (a_n \wedge b_1) \oplus (a_n \wedge b_2) ... (a_n \wedge b_m) \\
60+
\end{aligned}
61+
$$
62+
63+
由于布尔代数中,异或运算就是不进位的加法,与运算就是乘法,所以上式可以简化为:
64+
65+
$$
66+
\text{ans} = (a_1 \oplus a_2 \oplus \cdots \oplus a_n) \wedge (b_1 \oplus b_2 \oplus \cdots \oplus b_m)
67+
$$
68+
69+
即,数组 `arr1` 的异或和与数组 `arr2` 的异或和的与运算结果。
70+
71+
时间复杂度 $O(n + m)$,空间复杂度 $O(1)$。其中 $n$ 和 $m$ 分别为数组 `arr1``arr2` 的长度。
72+
5073
<!-- tabs:start -->
5174

5275
### **Python3**
5376

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

5679
```python
57-
80+
class Solution:
81+
def getXORSum(self, arr1: List[int], arr2: List[int]) -> int:
82+
a = reduce(xor, arr1)
83+
b = reduce(xor, arr2)
84+
return a & b
5885
```
5986

6087
### **Java**
6188

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

6491
```java
92+
class Solution {
93+
public int getXORSum(int[] arr1, int[] arr2) {
94+
int a = 0, b = 0;
95+
for (int v : arr1) {
96+
a ^= v;
97+
}
98+
for (int v : arr2) {
99+
b ^= v;
100+
}
101+
return a & b;
102+
}
103+
}
104+
```
105+
106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
int getXORSum(vector<int>& arr1, vector<int>& arr2) {
112+
int a = accumulate(arr1.begin(), arr1.end(), 0, bit_xor<int>());
113+
int b = accumulate(arr2.begin(), arr2.end(), 0, bit_xor<int>());
114+
return a & b;
115+
}
116+
};
117+
```
65118
119+
### **Go**
120+
121+
```go
122+
func getXORSum(arr1 []int, arr2 []int) int {
123+
var a, b int
124+
for _, v := range arr1 {
125+
a ^= v
126+
}
127+
for _, v := range arr2 {
128+
b ^= v
129+
}
130+
return a & b
131+
}
66132
```
67133

68134
### **...**

solution/1800-1899/1835.Find XOR Sum of All Pairs Bitwise AND/README_EN.md

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,56 @@ The XOR sum = 0 XOR 1 XOR 2 XOR 0 XOR 2 XOR 1 = 0.
4949
### **Python3**
5050

5151
```python
52-
52+
class Solution:
53+
def getXORSum(self, arr1: List[int], arr2: List[int]) -> int:
54+
a = reduce(xor, arr1)
55+
b = reduce(xor, arr2)
56+
return a & b
5357
```
5458

5559
### **Java**
5660

5761
```java
62+
class Solution {
63+
public int getXORSum(int[] arr1, int[] arr2) {
64+
int a = 0, b = 0;
65+
for (int v : arr1) {
66+
a ^= v;
67+
}
68+
for (int v : arr2) {
69+
b ^= v;
70+
}
71+
return a & b;
72+
}
73+
}
74+
```
75+
76+
### **C++**
77+
78+
```cpp
79+
class Solution {
80+
public:
81+
int getXORSum(vector<int>& arr1, vector<int>& arr2) {
82+
int a = accumulate(arr1.begin(), arr1.end(), 0, bit_xor<int>());
83+
int b = accumulate(arr2.begin(), arr2.end(), 0, bit_xor<int>());
84+
return a & b;
85+
}
86+
};
87+
```
5888
89+
### **Go**
90+
91+
```go
92+
func getXORSum(arr1 []int, arr2 []int) int {
93+
var a, b int
94+
for _, v := range arr1 {
95+
a ^= v
96+
}
97+
for _, v := range arr2 {
98+
b ^= v
99+
}
100+
return a & b
101+
}
59102
```
60103

61104
### **...**
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution {
2+
public:
3+
int getXORSum(vector<int>& arr1, vector<int>& arr2) {
4+
int a = accumulate(arr1.begin(), arr1.end(), 0, bit_xor<int>());
5+
int b = accumulate(arr2.begin(), arr2.end(), 0, bit_xor<int>());
6+
return a & b;
7+
}
8+
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
func getXORSum(arr1 []int, arr2 []int) int {
2+
var a, b int
3+
for _, v := range arr1 {
4+
a ^= v
5+
}
6+
for _, v := range arr2 {
7+
b ^= v
8+
}
9+
return a & b
10+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution {
2+
public int getXORSum(int[] arr1, int[] arr2) {
3+
int a = 0, b = 0;
4+
for (int v : arr1) {
5+
a ^= v;
6+
}
7+
for (int v : arr2) {
8+
b ^= v;
9+
}
10+
return a & b;
11+
}
12+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Solution:
2+
def getXORSum(self, arr1: List[int], arr2: List[int]) -> int:
3+
a = reduce(xor, arr1)
4+
b = reduce(xor, arr2)
5+
return a & b

0 commit comments

Comments
 (0)