题目链接
leetcode 1835. Find XOR Sum of All Pairs Bitwise AND
题目大意
有整数数组list1和list2,求list1中的每个数 与 list2中的每个数做and运算后所有数字的异或和
题解
本题需要使用到位运算中的一个性质,即逻辑与对逻辑异或满足分配律
推导过程
List1 = [a1, a2, a3]
List2 = [b1, b2, b3]
ans = (a1 & b1) ^ (a1 & b2) ^ (a1 & b3) ^
(a2 & b1) ^ (a2 & b2) ^ (a2 & b3) ^
(a3 & b1) ^ (a3 & b2) ^ (a3 & b3)
//其中
(a1 & b1) ^ (a1 & b2) ^ (a1 & b3) = a1 & (b1 ^ b2 ^ b3)
//以此类推
(a2 & b1) ^ (a2 & b2) ^ (a2 & b3) = a2 & (b1 ^ b2 ^ b3)
(a3 & b1) ^ (a3 & b2) ^ (a3 & b3) = a3 & (b1 ^ b2 ^ b3)
//所以
ans = (a1 ^ a2 ^ a3) & (b1 ^ b2 ^ b3)
代码
class Solution {
public int getXORSum(int[] arr1, int[] arr2) {
int xor1 = 0;
int xor2 = 0;
for(int a: arr1) {
xor1 ^= a;
}
for(int b: arr2) {
xor2 ^= b;
}
return xor1 & xor2;
}
}