Leetcode-1442-形成两个异或相等数组的三元组数目
描述
思路
- j 的取值范围为 [ i, k),且均在数组长度之内,不可越界
- 从 i 到 j - 1的异或值 == 从 j 到 k 的异或值
- a == b, 则 a ^ b == 0,此问题可转化为求子序列的异或为0
- 只要考虑 i 和 k 的 位置即可,j 在中间任何位置都可以,只要保证从 i 到 k 的异或值为0
代码
class Solution{
public int countTriplets(int[] arr){
// a == b ===> a ^ b == 0
// 题目转换为求字串的异或为0
int n = arr.length;
int res = 0;
for(int i = 0; i < n; i++){
int t = arr[i];
for(int k = i + 1; k < n; k++){
t = t ^ arr[k];
if(t == 0){
// j 在 [ i, k )区间任何位置都可以
res += k - i;
}
}
}
return res;
}
}