2024-05-30 Daily Challenge
Today I have done leetcode's May LeetCoding Challenge with cpp
.
May LeetCoding Challenge 30
Description
Count Triplets That Can Form Two Arrays of Equal XOR
Given an array of integers arr
.
We want to select three indices i
, j
and k
where (0 <= i < j <= k < arr.length)
.
Let's define a
and b
as follows:
a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]
b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]
Note that ^ denotes the bitwise-xor operation.
Return the number of triplets (i
, j
and k
) Where a == b
.
Example 1:
Input: arr = [2,3,1,6,7] Output: 4 Explanation: The triplets are (0,1,2), (0,2,2), (2,3,4) and (2,4,4)
Example 2:
Input: arr = [1,1,1,1,1] Output: 10
Constraints:
1 <= arr.length <= 300
1 <= arr[i] <= 108
Solution
class Solution {
public:
int countTriplets(vector<int>& arr) {
int n = arr.size();
vector<int> prefix(n + 1, 0);
for(int i = 0; i < n; ++i) {
prefix[i + 1] = prefix[i] ^ arr[i];
}
int answer = 0;
for(int i = 0; i < n; ++i) {
for(int k = i + 1; k < n ;++k) {
if(prefix[i] == prefix[k + 1]) answer += (k - i);
}
}
return answer;
}
};