题目链接:戳我
在解决此题之前,先了解异或的性质。
异或就是不进位加法。
x^x=0
x^0=x
ok,知道这个就可以解决这个问题了。
其实从[2,4] 就相当于把0-1的数字与0-4的数字一起异或。结果就会导致0-1的数字全部消去。只剩下2-4数字的异或和。
例如:arr = [1,3,4,8,9], queries =[2,4]
相当于(1 ^ 3 ) ^ (1 ^ 3 ^ 4 ^ 8 ^ 9) = 4 ^ 8 ^ 9
知道了这个,就简单了,直接先遍历一遍arr,求出arr[0->i]的异或和就可以了
不多说,看代码吧
class Solution {
public:
vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) {
//利用异或的重要性质,x^x=0,x^0=0 就可以了
ios_base::sync_with_stdio(false);
cin.tie(NULL);
vector<int> ans;
int index1,index2;
for (int i = 1; i < arr.size();++i)
arr[i] ^= arr[i - 1];
//那么求[1,2]就相当于arr[1-1]^arr[2] 对于[0,1],就直接是arr[1]
for (int i = 0; i < queries.size(); ++i) {
index1 = queries[i][0];
index2 = queries[i][1];
if (index1 > 0) ans.push_back((arr[index1 - 1] ^ arr[index2]));
else ans.push_back(arr[index2]);
}
return ans;
}
};