栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode 1310 子数组异或查询 题解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号