题目:
https://leetcode-cn.com/problems/xor-queries-of-a-subarray/
题解:
- 前缀和模板题,记住异或运算:
0^x=x、x^x=0
- 至于为什么前缀和要比原数组多一个的原因:假设要求data[0…i],那么就需要pre[i] - pre[-1]。我们就多一个0,变成pre[i+1]-pre[0];所以[0,i]的异或值为等于pre[i+1]^pre[0]。
代码如下:
class Solution {
public:
vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) {
vector<int> res;
int n=arr.size();
/*for(int i=0;i<n;++i)
{
int a=queries[i][0],b=queries[i][1];
int temp=arr[a];
for(int j=a+1;j<=b;++j){
temp^=arr[j];
}
res.push_back(temp);
}*/
//前缀和数组要比原数组多一个的原因:
//假设要求data[0..i],那么就需要pre[i] - pre[-1]。我们就多一个0,变成pre[i+1]-pre[0]
vector<int> pre(n+1,0);
for(int i=0;i<n;++i){
pre[i+1]=pre[i]^arr[i];
}
for(auto& it:queries){
res.push_back(pre[it[1]+1]^pre[it[0]]);
}
return res;
}
};