Vison's Blog
所有文章
文章总览
编辑器
Publications
About Me
Search
目录
#toc-container
下载Markdown文件
【5.12】LeetCode每日一题· 子数组异或查询
2021年05月12日 10时02分
标签:
LeetCode
二进制
## 题目描述 有一个正整数数组 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] ``` #### 提示 ``` 1 <= arr.length <= 3 * 10^4 1 <= arr[i] <= 10^9 1 <= queries.length <= 3 * 10^4 queries[i].length == 2 0 <= queries[i][0] <= queries[i][1] < arr.length ``` #### 来源 > 来源:力扣(LeetCode) > 链接:[题目链接](https://leetcode-cn.com/problems/xor-queries-of-a-subarray/) ## 解题思路 平平无奇的异或前缀和裸题。 ## 代码 ```cpp class Solution { public: vector
xorQueries(vector
& arr, vector
>& queries) { const int n = arr.size(); int xorSum[n+1]; xorSum[0] = 0; for(int i = 1; i <= n; i++){ xorSum[i] = xorSum[i-1] ^ arr[i-1]; } vector
res(queries.size()); int cnt = 0; for(auto& query: queries){ res[cnt++] = xorSum[query[1]+1] ^ xorSum[query[0]]; } return res; } }; ``` ## 用时和内存 > 执行用时:80 ms,在所有 C++提交中击败了63.53%的用户 > 内存消耗:31.3 MB,在所有 C++提交中击败了97.25%的用户
所有评论
暂无评论
新增评论
评论
邮箱
邮箱仅作验证使用
图形验证码
邮箱验证码
发送验证码
发表评论
所有评论
暂无评论