给你一个正整数的数组arr。还给你一个数组queries,其中queries[i]=[lefti, righti]。
对于每个queries[i],计算从lefti到righti的元素的XOR(即arr[lefti] XOR arr[lefti + 1] XOR ... XOR arr[righti] )。
返回一个数组答案,其中答案[i]是第i个查询的答案。
计算xor数组,xor[i] = xor[i-1] ^ arr[i]
.
例如数组1,2,3, xor = 1, 1^2, 1^2^3
.
然后根据xor的特性 a^b^a = b,当我们计算 i ~ j 范围的xor值就是等于 xor(0~j) ^ xor(0~i-1)
.
func xorQueries(arr []int, queries [][]int) []int {
l := len(arr)
ans := make([]int, len(queries))
xor := make([]int, len(arr))
xor[0] = arr[0]
for i := 1; i < l; i++ {
xor[i] = xor[i-1] ^ arr[i]
}
for i, q := range queries {
left, right := q[0], q[1]
if left == right {
ans[i] = arr[right]
continue
}
if left == 0 {
ans[i] = xor[right]
continue
}
ans[i] = xor[right] ^ xor[left-1]
}
return ans
}