zoukankan      html  css  js  c++  java
  • 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]。

  • 相关阅读:
    数组_leetcode283
    数组_leetcode438
    数组_leetcode215
    数组_leetcode167
    数组_leetcode209
    数组_leetcode88
    数组_leetcode80
    数组_leetcode76
    数组_leetcode75
    数组_leetcode27
  • 原文地址:https://www.cnblogs.com/asenyang/p/12180819.html
Copyright © 2011-2022 走看看