1442. Count Triplets That Can Form Two Arrays of Equal XOR
https://leetcode.com/problems/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:
Example 2:
Example 3:
Example 4:
Example 5:
Constraints:
1 <= arr.length <= 300
1 <= arr[i] <= 10^8
对给定数组arr问三元组(i, j, k)满足xor(arr[i:j]) == xor(arr[j:k))的三元组个数。xor(arr[i:j]) == xor(arr[j:k))意味着xor(arr[i:j]) ^ xor(arr[j:k)) == xor(arr[i:j]) == 0,此时对k,遍历i,当prexor[i-1] ^ prexor[k] == 0时,意味着对i,k,能和中间的所有j组成满足条件的三元组,res += k - i,总时间复杂度O(N^2);进一步因为prexor[i-1] ^ prexor[k] == 0时,prexor[i - 1] == prexor[k],所以可以统计每次prexor[k]出现的频率和sum(出现的index),也就是i-1的位置和,res += k - i for all i => res += freq(prexor[k]) * (k - 1) - (sum(i - 1) for all i that prexor[i - 1] == prexor[k]),初始时还有值0对应的位置-1和频率1,总时间复杂度O(N)。
Last updated
Was this helpful?