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 5405? 乘号 发表于 2020-5-10 16:33
5405?
周赛
页:
[1]