首页 > 编程语言 > 详细

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

时间:2021-05-18 23:08:19      阅读:29      评论:0      收藏:0      [点我收藏+]

欲求a==b,即有s[i-1]s[j-1]=s[j-1]s[k];
∵有s[j-1],∴有s[i-1]=s[k];

/*
 * @lc app=leetcode.cn id=1442 lang=javascript
 *
 * [1442] 形成两个异或相等数组的三元组数目
/**
异或运算满足结合律和交换律,且任意数异或自身等于 0
找到异或的递推式=>推出Si=Sk+1
 */
var countTriplets = function(arr) {
    let s=[],n=arr.length;
    s[-1]=0;
    // 异或前缀和 s[0~n-1]
    for(let i=0;i<n;i++)
    {
        s[i]=s[i-1]^arr[i];
    }
    let ans=0;
    // 异或性质:a^b=b^c 则有a==c,所以i-1==k即可
    // for(let i=0;i<n;i++)
    // {
    //     for(let j=i+1;j<n;j++)
    //     {
    //         for(let k=j;k<n;k++)
    //         {
    //             let a=s[i-1]^s[j-1];
    //             let b=s[j-1]^s[k];
    //             if(a==b) ans++;
    //         }
    //     }
    // }
    for(let i=0;i<n;i++)
    {
        for(let k=i+1;k<n;k++)
        {
            if(s[i-1]==s[k])
            {
                ans+=k-i;
            }
        }
    }
    return ans;
};
// @lc code=end

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

原文:https://www.cnblogs.com/Calculus9/p/14782536.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!