首页 > 其他 > 详细

leetcode1310

时间:2020-01-11 20:12:31      阅读:66      评论:0      收藏:0      [点我收藏+]
 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]。

leetcode1310

原文:https://www.cnblogs.com/asenyang/p/12180819.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!