LeetCode 1310 子数组异或查询 题解

LeetCode 1310 子数组异或查询 题解,第1张

LeetCode 1310 子数组异或查询 题解 LeetCode 1310 子数组异或查询 题解
有一个正整数数组 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
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4691741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-07
下一篇 2022-11-07

发表评论

登录后才能评论

评论列表(0条)

保存