原题
https://leetcode-cn.com/problems/count-triplets-that-can-form-two-arrays-of-equal-xor/

思路
首先想到异或前缀和
然后最重要的就是异或公式推导
a = S i ⊕ S j a = S_i ⊕ S_j a=Si⊕Sj
b = S j ⊕ S k + 1 b = S_j ⊕ S_{k+1} b=Sj⊕Sk+1
a = b a = b a=b
S i ⊕ S j = S j ⊕ S k + 1 S_i ⊕ S_j = S_j ⊕ S_{k+1} Si⊕Sj=Sj⊕Sk+1
S i = S k + 1 S_i = S_{k+1} Si=Sk+1
在推导或等式s[i]==s[k+1]的时候,完全把j消掉了。
因此在s[i]=s[k+1]的情况下,对于任意一个在( i , k ]范围内的j,a==b都是恒成立的
题解
class Solution {
public int countTriplets(int[] arr) {
int len = arr.length;
int[] sum = new int[len+1];
int res = 0;
for (int i = 0; i < len; i++) {
sum[i+1] = sum[i] ^ arr[i];
}
for (int i = 0; i < len; i++) {
for (int k = i+1; k < len; k++) {
if (sum[i] == sum[k+1]) {
res += k - i;
}
}
}
return res;
}
}

本文针对LeetCode上的一道计数三元组问题进行了解析,提出使用异或前缀和的方法,并通过详细的异或公式推导简化问题。最终给出了一种高效的解决方案。
398

被折叠的 条评论
为什么被折叠?



