
有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor ... xor arr[Ri])作为本次查询的结果。 并返回一个包含给定查询 queries 所有结果的数组。 示例 1: 输入:arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]] 输出:[2,7,14,8] 解释: 数组中元素的二进制表示形式是: 1 = 0001 3 = 0011 4 = 0100 8 = 1000 查询的 XOR 值为: [0,1] = 1 xor 3 = 2 [1,2] = 3 xor 4 = 7 [0,3] = 1 xor 3 xor 4 xor 8 = 14 [3,3] = 8
Java:
class Solution {
public int[] xorQueries(int[] arr, int[][] queries) {
int n = arr.length, m = queries.length;
int[] xors = new int[n+1];//xors[i+1] = arr[0]~arr[i]的异或前缀
for(int i = 0; i < n; i++){
xors[i+1] = xors[i] ^ arr[i];//这样比较好处理,不然xors[i] = arr[0]~arr[i]的话,query[left,right] = xors[left - 1] ^ xors[right],当left=0时没法统一处理
}
int[] res = new int[m];
for(int i = 0 ; i < m; i++){
res[i] = xors[queries[i][0]] ^ xors[queries[i][1]+1];
//query[left,right] = xors[left] ^ xors[right+1]
}
return res;
}
}
Go:
func xorQueries(arr []int, queries [][]int) []int {
xors := make([]int, len(arr) + 1)
res := make([]int, len(queries))
for i, v := range(arr){
xors[i+1] = xors[i] ^ v
}
for i, v := range(queries){
res[i] = xors[v[0]] ^ xors[v[1] + 1]
}
return res
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)