LeetCode题解——形成两个异或相等数组的三元组数目
- 题目介绍
- 解题思路
- 由a==b可知a^b==0
- 然后观察a与b的表达式,发现a和b的组合是数组一个连续的区间arr[i]...arr[j-1],arr[j]...arr[k]
- 由上面两点可知我们要找到一个区间[i,k],使得这里面的元素的异或值等于0,j的取值(i,k],j有几种可能,就是有几种符合条件的三元组
- 所以我们只要遍历arr,找到所有异或值位0的子区间
- 代码示例
class Solution {
public:
int countTriplets(vector<int>& arr) {
int len = arr.size();
int sum = 0,num = 0;
for(int i = 0; i< len-1; i++){
sum = arr[i];
for(int j = i+1; j < len; j++){
sum ^= arr[j];
if(sum == 0 ){
num = num + (j-i);
}
}
}
return num;
}
};