糖逗 发表于 2020-5-10 16:14:58

C++刷leetcode(5405. 形成两个异或相等数组的三元组数目)【位运算】

题目描述:
给你一个整数数组 arr 。

现需要从数组中取三个下标 i、j 和 k ,其中 (0 <= i < j <= k < arr.length) 。

a 和 b 定义如下:

a = arr ^ arr ^ ... ^ arr
b = arr ^ arr ^ ... ^ arr
注意:^ 表示 按位异或 操作。

请返回能够令 a == b 成立的三元组 (i, j , k) 的数目。

 

示例 1:

输入:arr =
输出:4
解释:满足题意的三元组分别是 (0,1,2), (0,2,2), (2,3,4) 以及 (2,4,4)
示例 2:

输入:arr =
输出:10
示例 3:

输入:arr =
输出:0
示例 4:

输入:arr =
输出:3
示例 5:

输入:arr =
输出:8
 

提示:

1 <= arr.length <= 300
1 <= arr <= 10^8

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-triplets-that-can-form-two-arrays-of-equal-xor
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


class Solution {
public:
    int countTriplets(vector<int>& arr) {
      int len = arr.size();
      int temp = 0;
      int res = 0;
      for(int i = 0; i < len-1; i++){
            for(int k = i+1; k < len; k++){
                for(int j = i; j <= k; j++){
                  temp ^= arr;
                }
                if(temp == 0) res+=k-i;
                temp = 0;
            }
      }
      return res;
    }
};


注意事项:
1.将a==b的问题转化为 a^b == 0

乘号 发表于 2020-5-10 16:33:02

5405?

March2615 发表于 2020-5-10 16:54:31

乘号 发表于 2020-5-10 16:33
5405?

周赛
页: [1]
查看完整版本: C++刷leetcode(5405. 形成两个异或相等数组的三元组数目)【位运算】