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

解题思路

维护一个前缀数组sum,sum[i]代表原数组中arr[0] xor arr[1]…arr[i]的结果

因此如果要查询某个区间[i…j]的异或的结果,那么只需要计算sum[i-1]^sum[j]

因为

  • sum[j]=arr[0] xor arr[1]…xor arr[i-1]…xor arr[j]
  • sum[i-1]=arr[0] xor arr[1]…xor arr[i-1]
  • sum[i-1] xor arr[i]…xor arr[j]=sum[j]
    所以可得 arr[i]…xor arr[j]=sum[i-1]^sum[j]

代码

func xorQueries(arr []int, queries [][]int) []int {n,m := len(arr),len(queries)sum := make([]int, n)res:=make([]int,m)sum[0]=arr[0]for i := 1; i <n ; i++ {sum[i]=arr[i]^sum[i-1]}for i, query := range queries {if query[0]==0{res[i]=sum[query[1]]}else {res[i]=sum[query[0]-1]^sum[query[1]]}}return res
}

leetcode 1310. 子数组异或查询(位运算)相关推荐

  1. LeetCode 1310. 子数组异或查询(前缀异或)

    1. 题目 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]. 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 a ...

  2. LeetCode 1310 子数组异或查询

    有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]. 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] ...

  3. 文巾解题 1310. 子数组异或查询

    1 题目描述 2 解题思路 2.1 异或的性质 2.2 本体思路 比如a^b,那么就相当于(1^2^-.^a-1)^(1^2&-.^b).所以我们只需要计算arr这边每个元素和之前元素的总异或 ...

  4. LeetCode 1856. 子数组最小乘积的最大值(前缀和 + 单调栈)

    文章目录 1. 题目 2. 解题 1. 题目 一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 . 比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (3+2+5) ...

  5. LeetCode 2104. 子数组范围和(单调栈)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums .nums 中,子数组的 范围 是子数组中最大元素和最小元素的差值. 返回 nums 中 所有 子数组范围的 和 . 子数组是 ...

  6. LeetCode 898. 子数组按位或操作(前缀和思想)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 正解 1. 题目 我们有一个非负整数数组 A. 对于每个(连续的)子数组 B = [A[i], A[i+1], ..., A[j]] ( i ...

  7. LeetCode 907. 子数组的最小值之和(单调栈)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组. 由于答案可能很大,因此返回答案模 10^9 + 7. 示 ...

  8. leetcode - 898. 子数组按位或操作(使用了集合)

    我们有一个非负整数数组 A. 对于每个(连续的)子数组B=[A[i],A[i+1],...,A[j]](i<=j)B = [A[i], A[i+1], ..., A[j]] ( i <= ...

  9. LeetCode - 644 子数组最大平均数 II

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 644. 子数组最大平均数 II - 力扣(LeetCode) 题目描述 给定一个包含 n 个整数的数组nums,找到最大平均值的连 ...

最新文章

  1. R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小
  2. 怎样通过css控制table的部分td
  3. 使用logstash将Mysql中的数据导入到ElasticSearch中(详细步骤,win_Elasticsearch)
  4. android span的用法,Android Span的使用
  5. 如何安装最新版本的ABAP Development tools
  6. Facebook 开源 Instagram 的Python 代码静态安全分析工具 Pysa
  7. redis知识点及常见面试题
  8. 使用JQuery快速高效制作网页交互特效第六章课后
  9. 球坐标系下拉普拉斯方程求解(Laplace equation)二
  10. 电压负反馈放大电路(基于三极管)
  11. i710750h和r74800h玩游戏哪个好 r7 4800h和i7 10750h哪个性能好
  12. java描述空间直线_java实验作业类的定义与描述
  13. 如何把h5场景链接入微信公众号?
  14. 网络爬虫playwright实现网站自动登录并签到
  15. PHP导出Excel时数据量过大的问题
  16. RFC1945 超文本传输协议--HTTP/1.0 之一
  17. 洛谷P1426 小鱼会有危险吗
  18. python数据可视化---Pyecharts作图方式、修饰逻辑与数据格式
  19. DeFi之道丨两种衍生品策略教你对冲DeFi头寸风险
  20. value iteration和Q-learning算法

热门文章

  1. mysql数据库实用教程答案
  2. 美团安卓面试,难道Android真的凉了?快来收藏!
  3. (9)How to take a picture of a black hole
  4. angular6 iframe应用
  5. 中国石油大学(华东)暑期集训--二进制(BZOJ5294)【线段树】
  6. caioj1522: [NOIP提高组2005]过河
  7. 将Session写入Memcache
  8. python画激活函数图像
  9. CF888E Maximum Subsequence(meet in the middle)
  10. BZOJ4127Abs——树链剖分+线段树