1 class Solution: 2 def xorQueries(self, arr: ‘List[int]‘, queries: ‘List[List[int]]‘) -> ‘List[int]‘: 3 n = len(arr) 4 prefixsum = [arr[0]] * n 5 res = [] 6 for i in range(1,n): 7 prefixsum[i] = prefixsum[i-1] ^ arr[i] 8 9 m = len(queries) 10 for i in range(m): 11 begin = queries[i][0] 12 end = queries[i][1] 13 if begin == 0: 14 cur = prefixsum[end] 15 else: 16 cur = prefixsum[end] ^ prefixsum[begin-1] 17 res.append(cur) 18 return res
算法思想:位运算。根据异或运算的性质有:x ^ x = 0,而x ^ 0 = x。
先生成前序异或数组prefixsum。
对于闭区间[begin,end],只需要使用prefixsum对应的边界位置进行异或即可。
如果begin==0,计算结果就是prefixsum[end];
如果begin > 0,计算激活就是prefixsum[end] - prefixsum[begin-1]。
原文:https://www.cnblogs.com/asenyang/p/12180819.html