形成两个异或相等数组的三元组数目

110 阅读1分钟

【题目】

给你一个整数数组 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;

}`