【题目】
给你一个整数数组 arr 。
现需要从数组中取三个下标 i、j 和 k ,其中 (0 <= i < j <= k < arr.length) 。
a 和 b 定义如下: a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]
b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]
注意:^ 表示 按位异或 操作。 请返回能够令 a == b 成立的三元组 (i, j , k) 的数目。
来源:力扣(LeetCode)
【一】
*若a==b,则a⊕b=0,即:arr[i]⊕arr[i+1]⊕arr[i+2]⊕……⊕arr[k]=0(找数组中连续的一段)
*假设找到了这一段,有X个元素,i定,k定,而i<j<=k,则j有X-1种可能
*因为i<j<=k,所以X>=2
`public int countTriplets(int [] arr){
int total=0;
int length=arr.length;
for(int i=0;i<length-1;i++){
int xor=arr[i];
for(int j=i+1;j<length;j++){
xor^=arr[j];
if(xor==0){
total+=j-i;
}`
`}
}
return total;
}`