码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2021-05-24 16:33:33      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:三元组   return   tor   结果   一个   class   let   else   cto   

思路:
类似的题做过了,一个优化算法就是(s0s1s2...si-1)(s0s1s2....si-1....sn)=(si...^sn).
因此我们就能计算出前缀异或的结果从而将暴力算法O(n4)优化成O(n3)

代码:

class Solution {
public:
    int countTriplets(vector<int>& arr) {
        unordered_map<int,int> xorpre;
        int n = arr.size();
        int pre=0;
        int res=0;
        for(int i=0;i<n;++i){
            pre = pre ^ arr[i];
            xorpre[i]=pre;
        }
        int a=0,b=0;
        for(int i=0;i<n-1;++i){ //虽然有三个下标,但是因为 j<=k 所以不能 i 小于n-2,j不能小于n-1
            for(int j=i+1;j<n;++j){
                if(i==0){
                    a = xorpre[j-1];
                }
                else{ 
                    a = xorpre[j-1]^xorpre[i-1];
                }
                for(int k=j;k<n;++k){
                    b = xorpre[k]^xorpre[j-1];
                    if(a == b) res++;
                }
            }
        }
        return res;
    }
};

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

标签:三元组   return   tor   结果   一个   class   let   else   cto   

原文地址:https://www.cnblogs.com/Mrsdwang/p/14786027.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!