leetcode算法题 pro1442 形成两个异或相等数组的三元组数目

leetcode算法题 pro1442 形成两个异或相等数组的三元组数目

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

题目描述

给你一个整数数组 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) 的数目。

题目思路

如果直接按题目走,思考起来会有些困难,但是可以换一种思路去思考。由于需要使a==b,那么说明a^b也一定满足值为0,那么这道问题就可以简化为求全部异或的值为0的子串数。那么,思路大致就是

两次遍历数组,找出异或值为0的子串区间。满足的区间为[i,j,k],由于i < j <= k,所以j的取值可以为(i,k]范围内所有整数值,也就有k-i个区间。在遍历过程中,统计所有满足条件的区间数,就是所求的答案。

 

代码

两次遍历数组。

 1     public int countTriplets(int[] arr) {
 2         int result = 0;
 3         for(int i=0;i<arr.length;i++){
 4             int sum = arr[i];
 5             for(int k=i+1;k<arr.length; k++){
 6                 sum ^= arr[k];
 7                 if(sum == 0)
 8                      result += (k-i);
 9             }
10         }
11         return result;
12     }

 

官方题解地址:https://leetcode-cn.com/problems/count-triplets-that-can-form-two-arrays-of-equal-xor/solution/xing-cheng-liang-ge-yi-huo-xiang-deng-sh-jud0/

posted @ 2021-05-18 18:43  TidalCoast  阅读(48)  评论(0编辑  收藏  举报