子數組的異或查詢
1310。子數組的異或查詢
難度:中
主題:陣列、位元操作、前綴和
給你一個正整數數組 arr 。您還會獲得數組查詢,其中 requests[i] = [lefti, righti].
對於每個查詢,我計算從左i到右i元素的異或(即arr[lefti] XOR arr[lefti 1] 異或... 異或arr[右i] ).
回傳陣列答案,其中answer[i]是第i第查詢的答案。
範例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]
約束:
- 1 4
- 1 9
- 查詢[i].length == 2
- 0 i i
提示:
- x ^ y ^ x 的結果是什麼?
- 計算異或的前綴和。
- 使用前綴總和值處理查詢。
解:
我們可以利用前綴XOR技術。其工作原理如下:
方法:
前綴異或數組:我們計算一個前綴異或數組,其中 prefix[i] 表示從數組開頭到索引 i 的所有元素的異或。這使我們能夠在恆定時間內計算任何子數組的異或。
-
子數組的異或:
- 計算左索引與右索引之間元素的異或:
- 如果離開> 0,我們可以從左到右計算 XOR 作為 prefix[right] ^ prefix[left - 1]。
- 如果 left == 0,那麼結果就是 prefix[right]。
- 計算左索引與右索引之間元素的異或:
這使我們能夠在構造前綴 XOR 數組後在恆定時間內回答每個查詢。
計劃:
- 建立前綴異或陣列。
- 對於每個查詢,使用前綴 XOR 陣列來計算範圍 [left_i, right_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] ?>
解釋:
-
前綴異或構造:
- 建立數組前綴,使得 prefix[i] 包含從 arr[0] 到 arr[i] 的所有元素的異或。
- 例如,給定arr = [1, 3, 4, 8],前綴數組將為[1, 1^3, 1^3^4, 1^3^4^8] 或[1, 2 , 6, 14].
-
回答查詢:
- 對於每個查詢 [left, right],我們使用以下方法計算子數組 arr[left] 到 arr[right] 的異或:
- 字首[右] ^ 字首[左 - 1](若左 > 0)
- 字首[右](如果左== 0)
- 對於每個查詢 [left, right],我們使用以下方法計算子數組 arr[left] 到 arr[right] 的異或:
時間複雜度:
- 建構前綴數組:O(n),其中n是arr的長度。
- 處理查詢:O(q),其中q是查詢數量。
- 總體時間複雜度:O(n q),對於給定的限制是有效的。
這種方法確保我們可以有效地處理大小高達 30,000 的陣列上的多達 30,000 個查詢。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
- 領英
- GitHub
以上是子數組的異或查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP變量作用域常見問題及解決方法包括:1.函數內部無法訪問全局變量,需使用global關鍵字或參數傳入;2.靜態變量用static聲明,只初始化一次並在多次調用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數需通過use關鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規則有助於避免錯誤並提升代碼穩定性。

PHP註釋代碼常用方法有三種:1.單行註釋用//或#屏蔽一行代碼,推薦使用//;2.多行註釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧註釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時需注意閉合符號和避免嵌套。

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

寫好PHP註釋的關鍵在於明確目的與規範,註釋應解釋“為什麼”而非“做了什麼”,避免冗餘或過於簡單。 1.使用統一格式,如docblock(/*/)用於類、方法說明,提升可讀性與工具兼容性;2.強調邏輯背後的原因,如說明為何需手動輸出JS跳轉;3.在復雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標記待辦事項與問題,便於後續追踪與協作。好的註釋能降低溝通成本,提升代碼維護效率。

易於效率,啟動啟動tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

在PHP中獲取字符串特定索引字符可用方括號或花括號,但推薦方括號;索引從0開始,超出範圍訪問返回空值,不可賦值;處理多字節字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結果;實際應用中循環訪問前應檢查字符串長度,動態字符串需驗證有效性,多語言項目建議統一使用多字節安全函數。

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

在PHP中取字符串前N個字符可用substr()或mb_substr(),具體步驟如下:1.使用substr($string,0,N)截取前N個字符,適用於ASCII字符且簡單高效;2.處理多字節字符(如中文)時應使用mb_substr($string,0,N,'UTF-8'),並確保啟用mbstring擴展;3.若字符串含HTML或空白字符,應先用strip_tags()去除標籤、trim()清理空格,再截取以保證結果乾淨。
