【坚持每日一题5.13】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
示例 2:

输入:arr = [4,8,2,10], queries = [[2,3],[1,3],[0,0],[0,3]]
输出:[8,0,4,4]

思路:

今天题目我们可以采用类似于数组前缀和的解法:

构建数组 sumXor ,

数组长度 = arr数组长度 + 1

sumXor[0] = 0

sumXor = sumXor[i - 1] XOR arr[i - 1]

即 sumXor = 0 XOR arr[0] XOR … XOR arr

题目所求为计算从 Li 到 Ri 的 XOR 值,即 arr[Li] XOR arr[Li+1] XOR … XOR arr[Ri],其中 Ri >= Li

而 sumXor[Li] XOR sumXor[Ri + 1] = (0 XOR arr[0] XOR … XOR arr[Li - 1]) XOR (0 XOR arr[0] XOR … XOR arr[Ri])

利用异或特性:

归零律:a XOR a = 0

恒等律:a XOR 0 = a

化简上述式子可得:

sumXor[Li] XOR sumXor[Ri + 1] = arr[Li] XOR arr[Li+1] XOR … XOR arr[Ri]

所以利用 sumXor 我们便可在 O(n + m) 时间复杂度下求得结果,其中 n 为 arr 数组长度,m 为 queries 数组长度,示例代码如下:

class Solution {
    public int[] xorQueries(int[] arr, int[][] queries) {

        int[] sumXor = new int[arr.length + 1];

        sumXor[0] = 0;
        for(int i=0;i<arr.length;i++) {
            sumXor[i+1]=sumXor[i]^arr[i];
        }

        int[] res = new int[queries.length];
        for(int i=0;i<queries.length;i++) {
            res[i] = sumXor[queries[i][1]+1]^sumXor[queries[i][0]];
        }

        return res;

    }
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信博6主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值