#1310.子数组异或查询
##题目:
有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]。
对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li+1] xor … xor arr[Ri])作为本次查询的结果。
并返回一个包含给定查询 queries 所有结果的数组。
##思想:
前缀异或:xors[0]=0,xors[i+1]=xors[i]^arr[i]
位运算中前缀异或解决,即由所给数组可以求得该数组的前缀异或数组xors[],再通过规律发现arr[left]arr[right]=xors[left]xors[right+1],即可解决。
int* xorQueries(int* arr, int arrSize, int** queries, int queriesSize, int* queriesColSize, int* returnSize) {
int m = arrSize;
int* xors = (int*)malloc((m + 1) * sizeof(int));
xors[0] = 0;
for (int i = 0; i < m; i++) {
xors[i + 1] = xors[i] ^ arr[i];
}
int n = queriesSize;
for (int j = 0; j < n; j++) {
queriesColSize[j] = xors[queries[j][0]] ^ xors[queries[j][1] + 1];
}
*returnSize = n;
return queriesColSize;
}