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 <= 3001 <= 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;
}
};