题意

给你一个正整数的数组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
}