原题链接:Leetcode 1442. 形成两个异或相等数组的三元组数目 、
参考题解:Leetcode 1442. 形成两个异或相等数组的三元组数目 官解
二重循环:
class Solution {
public:
int countTriplets(vector<int>& arr) {
int n=arr.size(),res=0;
vector<int> sum(n+1,0);
for(int i=1;i<=n;i++) sum[i]=arr[i-1]^sum[i-1];
for(int i=1;i<=n;i++)
{
for(int k=i+1;k<=n;k++)
{
if(sum[i-1]==sum[k]) res+=(k-i);
}
}
return res;
}
};
哈希:
class Solution {
public:
int countTriplets(vector<int>& arr) {
int n=arr.size(),res=0,tmp=0;
unordered_map<int,int> cnt,sum;
for(int i=0;i<n;i++)
{
int t=tmp^arr[i];
if(cnt.count(t)) res+=cnt[t]*i-sum[t];
cnt[tmp]++;
sum[tmp]+=i;
tmp=t;
}
return res;
}
};