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 符號代表異或運算。兩個子段被視為相...