1310。子數組的異或查詢
難度:中
主題:陣列、位元操作、前綴和
給你一個正整數數組 arr 。您還會獲得數組查詢,其中 requests[i] = [lefti, righti].
對於每個查詢,我計算從左i到右i元素的異或(即arr[lefti] XOR arr[lefti 1] 異或... 異或arr[右i] ).
回傳陣列答案,其中answer[i]是第i第查詢的答案。
範例1:
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:
約束:
提示:
解:
我們可以利用前綴XOR技術。其工作原理如下:
前綴異或數組:我們計算一個前綴異或數組,其中 prefix[i] 表示從數組開頭到索引 i 的所有元素的異或。這使我們能夠在恆定時間內計算任何子數組的異或。
子數組的異或:
這使我們能夠在構造前綴 XOR 數組後在恆定時間內回答每個查詢。
讓我們用 PHP 實作這個解:1310。子數組的異或查詢
<?php /** * @param Integer[] $arr * @param Integer[][] $queries * @return Integer[] */ function xorQueries($arr, $queries) { ... ... ... /** * go to ./solution.php */ } // Example 1 $arr1 = [1, 3, 4, 8]; $queries1 = [[0, 1], [1, 2], [0, 3], [3, 3]]; print_r(xorQueries($arr1, $queries1)); // Output: [2, 7, 14, 8] // Example 2 $arr2 = [4, 8, 2, 10]; $queries2 = [[2, 3], [1, 3], [0, 0], [0, 3]]; print_r(xorQueries($arr2, $queries2)); // Output: [8, 0, 4, 4] ?>
前綴異或構造:
回答查詢:
這種方法確保我們可以有效地處理大小高達 30,000 的陣列上的多達 30,000 個查詢。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
以上是子數組的異或查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!