有一个正整数数组 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条)