class Solution {
public:
vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) {
//XOR[l, r] = XOR[0, r] ^ XOR[0, l-1]
//计算在闭区间[x,y]内,左右元素之间的异或,并按照上述公式计算得出结果
int temp=arr[0];//存储临时的异或值
vector<int>Xor;
Xor.push_back(arr[0]);//注意测试用例里面不会考虑自己和自己异或的情况,所以第一个元素不能是0,只能是其自身
for(int i=1;i<arr.size();i++)
{
//从第一个元素开始
Xor.push_back(temp^arr[i]);
temp=temp^arr[i];
}
//根据上述表格
vector<int>res;
for(int i=0;i<queries.size();i++)
{
if(queries[i][0]==0)
{
res.push_back(Xor[queries[i][1]]);
}
else
{
res.push_back(Xor[queries[i][1]]^Xor[queries[i][0]-1]);
}
}
return res;
}
};
LeetCode:1310. 子数组异或查询
最新推荐文章于 2021-05-13 22:55:46 发布