1310 子陣列異或查詢

2022-09-09 14:30:28 字數 1522 閱讀 3174

2021-05-12 leetcode每日一題

題目

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

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

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

輸入: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

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

輸出:[8,0,4,4]

1 <= arr.length <= 3 * 10^4

1 <= arr[i] <= 10^9

1 <= queries.length <= 3 * 10^4

queries[i].length == 2

0 <= queries[i][0] <= queries[i][1] < arr.length

分析

沒啥好說的,直接寫吧。

class solution 

}return res;}}

時間複雜度o(m * n),空間複雜度o(n)。

emmm…感覺分分鐘就要超時了。

本題還可以使用字首和來求解。**利用異或運算中的「相同數值進行運算結果為 0」的特性。**對於陣列,要求[a , b]區間的異或結果,可以通過[0, a - 1]和[0, b]的異或求得。

時間複雜度:令 arr 陣列長度為 n,queries陣列的長度為 m。預處理字首和陣列複雜度為 o(n);查詢的複雜度為 o(m)。整體複雜度為 o(n + m)

空間複雜度:o(n)

子段異或(異或字首和)

傳送門 第一行乙個整數 n 代表數列長度。第二行 n 個整數,代表數列。輸出乙個整數,代表答案。示例1 複製5 1 2 3 2 1 複製 2 子段 1,3 和子段 3,5 是合法子段。首先你得知道乙個知識點就是 如果sum i 為陣列a的前i項的異或和,就是說sum i a 1 a 2 a 3 a ...

陣列異或操作

給你兩個整數,n 和 start 陣列 nums 定義為 nums i start 2 i 下標從 0 開始 且 n nums.length 請返回 nums 中所有元素按位異或 xor 後得到的結果。示例 1 輸入 n 5,start 0 輸出 8 解釋 陣列 nums 為 0,2,4,6,8 其...

D 子段異或

輸入乙個數列a,你需要輸出其中異或值為0的不同子段的數量。乙個子段 l,r 1 le l le r le n1 l r n 的異或值為a l oplus a oplus a oplus ldots oplus a ral al 1 al 2 ar 其中 oplus 符號代表異或運算。兩個子段被視為相...