leetcode1310

 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]。

猜你喜欢

转载自www.cnblogs.com/asenyang/p/12180819.html