1. 程式人生 > 實用技巧 >1310. 子陣列異或查詢

1310. 子陣列異或查詢

有一個正整數陣列arr,現給你一個對應的查詢陣列queries,其中queries[i] = [Li,Ri]。

對於每個查詢i,請你計算從Li到Ri的XOR值(即arr[Li] xor arr[Li+1] xor ... xor arr[Ri])作為本次查詢的結果。

並返回一個包含給定查詢queries所有結果的陣列。

示例 1:

輸入:arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]]
輸出:[2,7,14,8]
解釋:
陣列中元素的二進位制表示形式是:
1 = 0001
3 = 0011
4 = 0100
8 = 1000
查詢的 XOR 值為:
[0,1] = 1 xor 3 = 2

[1,2] = 3 xor 4 = 7
[0,3] = 1 xor 3 xor 4 xor 8 = 14
[3,3] = 8
示例 2:

輸入:arr = [4,8,2,10], queries = [[2,3],[1,3],[0,0],[0,3]]
輸出:[8,0,4,4]

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/xor-queries-of-a-subarray

模仿字首和,結合x^y^x=y的性質,可以寫出字首異或

class Solution:
    def xorQueries(self, arr: List[int], queries: List[List[int]]) -> List[int]:
        pre
=[0] res=[] for i in range(len(arr)): pre.append(pre[i]^arr[i]) for (l,r) in queries: res.append(pre[l]^pre[r+1]) return res