【位運算】查詢子數組最大異或值|2693

本文涉及知識點

位運算、狀態壓縮、枚舉子集匯總

3277. 查詢子數組最大異或值

給你一個由 n 個整數組成的數組 nums,以及一個大小為 q 的二維整數數組 queries,其中 queries[i] = [li, ri]。

對于每一個查詢,你需要找出 nums[li…ri] 中任意 子數組 的 最大異或值。

數組的異或值 需要對數組 a 反復執行以下操作,直到只剩一個元素,剩下的那個元素就是 異或值:

對于除最后一個下標以外的所有下標 i,同時將 a[i] 替換為 a[i] XOR a[i + 1] 。
移除數組的最后一個元素。
返回一個大小為 q 的數組 answer,其中 answer[i] 表示查詢 i 的答案。

示例 1:

輸入: nums = [2,8,4,32,16,1], queries = [[0,2],[1,4],[0,5]]

輸出: [12,60,60]

解釋:

在第一個查詢中,nums[0…2] 的子數組分別是 [2], [8], [4], [2, 8], [8, 4], 和 [2, 8, 4],它們的異或值分別為 2, 8, 4, 10, 12, 和 6。查詢的答案是 12,所有異或值中的最大值。

在第二個查詢中,nums[1…4] 的子數組中最大的異或值是子數組 nums[1…4] 的異或值,為 60。

在第三個查詢中,nums[0…5] 的子數組中最大的異或值是子數組 nums[1…4] 的異或值,為 60。

示例 2:

輸入: nums = [0,7,3,2,8,5,1], queries = [[0,3],[1,5],[2,4],[2,6],[5,6]]

輸出: [7,14,11,14,5]

解釋:

下標 nums[li…ri] 最大異或值子數組 子數組最大異或值
0 [0, 7, 3, 2] [7] 7
1 [7, 3, 2, 8, 5] [7, 3, 2, 8] 14
2 [3, 2, 8] [3, 2, 8] 11
3 [3, 2, 8, 5, 1] [2, 8, 5, 1] 14
4 [5, 1] [5] 5

提示:

1 <= n == nums.length <= 2000
0<=nums[i]<=231?10 <= nums[i] <= 2^{31} - 10<=nums[i]<=231?1
1<=q==queries.length<=1051 <= q == queries.length <= 10^51<=q==queries.length<=105
queries[i].length == 2
queries[i] = [li, ri]
0 <= li <= ri <= n - 1

位運算

長度為1的數組異或值:a0a_0a0?
長度為2的數組的異或值:a0⊕a1a_0 \oplus a_1a0?a1?
長度為3的數組的異或值:a0⊕a1⊕a1⊕a2a_0 \oplus a_1 \oplus a_1 \oplus a_2a0?a1?a1?a2?a0a12a2a_0 a_1^2 a_2a0?a12?a2?異或兩次,相互抵消,即a0a2a0a2a0a2
長度為4的數組的異或值:(a0a1)(a2a3)(a_0a_1)(a_2a_3)(a0?a1?)(a2?a3?)a0a1a2a3a_0a_1a_2a_3a0?a1?a2?a3?
長度為5的數組的異或值:(a0a1)(a1a2)(a2a3)(a3a4)(a_0a_1)(a_1a_2)(a_2a_3)(a_3a_4)(a0?a1?)(a1?a2?)(a2?a3?)(a3?a4?)a0a4a_0a_4a0?a4?
長度為6的數組的異或值:a0a1a4a5a_0a_1a_4a_5a0?a1?a4?a5?
長度為7的數組的異或值:a0a2a4a6a_0a_2a_4a_6a0?a2?a4?a6?
沒有頭緒,看題解,有遞推式f(0,r)=f(0,r?1)⊕f(1,r)f(0,r)=f(0,r-1)\oplus f(1,r)f(0,r)=f(0,r?1)f(1,r),
自己思考的證明。
性質一:f(a)=?(ai×bi),bi∈0,1\bigoplus (a_i \times b_i),bi \in{0,1}?(ai?×bi?),bi0,1,因為aia_iai?異或兩次會抵消。
性質二e[i]=a[i]×c[i]→f(e)==f(a)⊕f(c)e[i]=a[i]\times c[i] \rightarrow f(e)== f(a) \oplus f(c)e[i]=a[i]×c[i]f(e)==f(a)f(c)。如果0==bi,左式和右式都不包括ai,ci;如果1==bi,左右式都包括一個ai,ci。0 == b_i,左式和右式都不包括a_i,c_i;如果1==b_i,左右式都包括一個a_i,c_i。0==bi?,左式和右式都不包括ai?,ci?;如果1==bi?,左右式都包括一個ai?,ci?
性質三:長度n的數組a,操作一次后:
f(a0a1?an?1)=f((a0⊕a1)(a1⊕a2)(an?2⊕an?1)f(a_0 a_1 \cdots a_{n-1})=f((a_0 \oplus a_1) (a_1 \oplus a_2) (a_{n-2} \oplus a_{n-1})f(a0?a1??an?1?)=f((a0?a1?)(a1?a2?)(an?2?an?1?),根據性質二遞推式得證。

實現

vMax1[left][r] = max?f(left?r,r)\max f(left\cdots r,r)maxf(left?r,r),遞推式 :vMax1[left][r]=max(vMax1[left+1][r],f(left,r))vMax1[left][r] = max(vMax1[left+1][r],f(left,r))vMax1[left][r]=max(vMax1[left+1][r],f(left,r))
vMax[left][r] = max?f(left1,r1),left≤left1≤r,left1≤r1≤r\max f(left1,r1),left \le left1 \le r,left1 \le r1 \le rmaxf(left1,r1),leftleft1r,left1r1r vMax[left][r] = max(vMax[left][r-1] ,vMax1[left,r])

代碼

核心代碼

class Solution {public:vector<int> maximumSubarrayXor(vector<int>& nums, vector<vector<int>>& queries) {const int N = nums.size();vector<vector<int>> f(N, vector<int>(N));for (int i = 0; i < N; i++) { f[i][i] = nums[i]; }auto vMax1 = f, vMax = f;for (int len = 2; len <= N; len++) {for (int i = 0; i + len <= N; i++) {const int end = i + len - 1;f[i][end] = f[i][end - 1] ^ f[i + 1][end];vMax1[i][end] = max(vMax1[i+1][end], f[i][end]);vMax[i][end] = max(vMax[i][end - 1], vMax1[i][end]);}}vector<int> ans;for (const auto& v : queries) {ans.emplace_back(vMax[v[0]][v[1]]);}return ans;}};

單元測試

vector<int> nums;vector<vector<int>> queries;TEST_METHOD(TestMethod11){nums = { 2,8,4,32,16,1 }, queries = { {0,2},{1,4},{0,5} };auto res = Solution().maximumSubarrayXor(nums, queries);AssertEx({ 12,60,60 }, res);}TEST_METHOD(TestMethod12){nums = { 0,7,3,2,8,5,1 }, queries = { {0,3},{1,5},{2,4},{2,6},{5,6} };auto res = Solution().maximumSubarrayXor(nums, queries);AssertEx({ 7,14,11,14,5 }, res);}

擴展閱讀

我想對大家說的話
工作中遇到的問題,可以按類別查閱鄙人的算法文章,請點擊《算法與數據匯總》。
學習算法:按章節學習《喜缺全書算法冊》,大量的題目和測試用例,打包下載。重視操作
有效學習:明確的目標 及時的反饋 拉伸區(難度合適) 專注
員工說:技術至上,老板不信;投資人的代表說:技術至上,老板會信。
聞缺陷則喜(喜缺)是一個美好的愿望,早發現問題,早修改問題,給老板節約錢。
子墨子言之:事無終始,無務多業。也就是我們常說的專業的人做專業的事。
如果程序是一條龍,那算法就是他的是睛
失敗+反思=成功 成功+反思=成功

視頻課程

先學簡單的課程,請移步CSDN學院,聽白銀講師(也就是鄙人)的講解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成戰斗了,為老板分憂,請學習C#入職培訓、C++入職培訓等課程
https://edu.csdn.net/lecturer/6176

測試環境

操作系統:win7 開發環境: VS2019 C++17
或者 操作系統:win10 開發環境: VS2022 C++17
如無特殊說明,本算法用**C++**實現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95835.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTML DOM 方法

HTML DOM 方法 引言 HTML DOM&#xff08;文檔對象模型&#xff09;是HTML文檔的編程接口&#xff0c;它允許開發者通過JavaScript來操作HTML文檔中的元素。DOM 方法是DOM編程的核心&#xff0c;它提供了豐富的操作手段來改變網頁的結構、樣式和行為。本文將詳細介紹HTML DOM中…

w嵌入式分享合集68

自己的原文哦~ https://blog.51cto.com/whaosoft/14133002 一、一鍵開關機電路的設計方案 方案一&#xff1a;電路圖 一鍵開關機電路分析如下&#xff1a; 電路工作流程如下&#xff1a; Key按下瞬間&#xff0c;Q2、Q1導通&#xff0c;7805輸入電壓在8.9V左右&…

FFmpeg QoS 處理

FFmpeg 中的 QoS (服務質量) 處理主要關注于實時流媒體傳輸中的時序控制、丟幀策略和網絡適應等方面。以下是 FFmpeg 中 QoS 相關的關鍵機制和配置方法。1. 基本 QoS 機制丟幀策略 (Frame Dropping)cAVDictionary *options NULL; av_dict_set(&options, "framedrop&q…

TexStudio中的Latex,PDFLatex,XeLatex和LuaLatex的區別

多種LaTeX編譯器一、多種LaTeX編譯器 1.1 PDFLaTeX&#xff08;1994年&#xff09; 默認、最常用的引擎。 輸入文件通常是 ASCII 或 UTF-8 編碼&#xff08;但中文需要 CJK 宏包或 ctex 宏包支持&#xff09;。 字體選擇受限&#xff1a;只能使用 TeX 自帶的字體或者 Type 1…

容器化部署:用Docker封裝機器翻譯模型與服務詳解

文章目錄一、機器翻譯容器化的技術棧選型1.1 為什么需要容器化MT模型&#xff1f;1.2 基礎鏡像選擇對比1.3 典型依賴分層方案1.4 性能對比&#xff08;容器化 vs 原生部署&#xff09;二、關鍵部署模式2.1 輕量級API服務封裝2.2 模型熱更新策略三、Docker鏡像構建3.1 編寫Docke…

leetcode_42 接雨水

1. 題意 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 2. 題解 這個題不會做&#xff0c;全部是看得題解捏。 不過能看懂題解感覺自己也很棒了&#xff01; 看完題解后感覺最難的是如何求出有多少…

Spring Boot 整合 Thymeleaf 模板引擎:從零開始的完整指南

引言&#xff1a;為什么選擇 Thymeleaf&#xff1f; Thymeleaf 是一個現代化的服務器端 Java 模板引擎&#xff0c;專為 Web 開發而設計。與 JSP 不同&#xff0c;Thymeleaf 模板是純 HTML 文件&#xff0c;可以直接在瀏覽器中預覽&#xff0c;無需后端服務器支持。這種"…

pytest介紹(python測試框架)(@pytest.mark.parametrize、@pytest.fixtures)

文章目錄**1. 核心特點**- **簡潔易用**&#xff1a;無需復雜的配置&#xff0c;只需編寫簡單的函數或類即可進行測試。- **豐富的斷言**&#xff1a;直接使用 Python 內置的 assert 語句&#xff0c;失敗時提供詳細的錯誤信息。- **自動發現測試**&#xff1a;通過約定的命名規…

[Python 基礎課程]繼承

在 Python 的面向對象編程&#xff08;OOP&#xff09;中&#xff0c;繼承&#xff08;Inheritance&#xff09; 是一種重要的機制&#xff0c;它允許一個類&#xff08;稱為子類或派生類&#xff09;從另一個類&#xff08;稱為父類、基類或超類&#xff09;中繼承屬性和方法。…

QT之設計器組件功能(8大類55個組件)

組件名稱 功能描述關鍵屬性1. Layouts&#xff08;布局組件&#xff09;(1) Vertical Layout&#xff08;垂直布局&#xff09;將子控件按垂直方向依次排列layoutSpacing&#xff1a;控件之間的間距layoutMargin&#xff1a;布局邊緣的邊距layoutStretch&#xff1a;設置各控件…

java中list的api詳細使用

在Java中&#xff0c;List是集合框架中最常用的接口之一&#xff0c;繼承自Collection&#xff0c;代表有序、可重復的元素集合&#xff08;允許null元素&#xff09;。其核心實現類有ArrayList&#xff08;數組實現&#xff0c;隨機訪問高效&#xff09;、LinkedList&#xff…

Azure AI Search 探索總結

Azure AI Search 原名 Azure Cognitive Service&#xff0c;是Azure中用來給AI項目構建知識庫的組件。知識庫本質和數據庫很像&#xff0c;但是內部的存儲結構和檢索算法不一樣。比如并不是知識庫的每一列都可以用來過濾、檢索或group by&#xff0c;而是要根據實際情況配置。A…

高效解決 pip install 報錯 SSLError: EOF occurred in violation of protocol

高效解決 pip install 報錯 SSLError: EOF occurred in violation of protocol 標簽&#xff1a; Python, pip, SSLError, Clash, 網絡代理, 問題解決 一、問題描述 在Python開發中&#xff0c;pip 是我們最親密的伙伴。然而&#xff0c;當你身處需要科學上網的環境&#xff0c…

CSS 核心知識點全解析:從基礎到實戰應用

大家好&#xff01;今天這篇文章將系統總結 CSS 的核心知識點&#xff0c;從最基礎的樣式引入到復雜的選擇器應用&#xff0c;再到盒子模型、文本處理等實戰技巧&#xff0c;全程結合代碼示例&#xff0c;讓你輕松掌握 CSS 的精髓。一、CSS 是什么&#xff1f;為什么需要它&…

ClickHouse的學習與了解

什么是ClickHouse&#xff1f; ClickHouse是一個用于聯機分析(OLAP)的列式數據庫管理系統(DBMS)。 在傳統的行式數據庫系統中&#xff0c;數據按如下順序存儲&#xff1a;RowWatchIDJavaEnableTitleGoodEventEventTime#0893543506621Investor Relations12016/5/18 5:19#1903295…

安卓11 12系統修改定制化_____修改系統 解鎖system分區 去除data加密 自由刪減系統應用

在定制化系統中。修改系統分區 解鎖system。讓用戶可以自由刪減應用。這個在定制化服務中比較常見。對于此項修改服務。需要我們了解基礎的分區常識以及常用的幾種基礎修改步驟。 通過博文了解?????? 1??????-----修改rom 解鎖 system 分區有什么意義 2????…

JetPack系列教程(八):PDF庫——讓Android應用也能優雅“翻頁”

JetPack系列教程&#xff08;八&#xff09;&#xff1a;PDF庫——讓Android應用也能優雅“翻頁” 在Android開發的世界里&#xff0c;加載PDF文件一直是個讓人又愛又恨的“小妖精”。愛它&#xff0c;因為PDF是文檔界的“萬能鑰匙”&#xff1b;恨它&#xff0c;因為原生Andr…

Three.js三大組件:場景(Scene)、相機(Camera)、渲染器(Renderer)

上一篇中我們學習了第一個Three.js場景"Hello World"。這一篇就來學習three.js的核心組件。 此圖來源&#xff08;Three.js中文網&#xff09; three.js的核心由三大組件構成&#xff1a;場景(Scene)、相機(Camera)和渲染器(Renderer)。下面我將詳細介紹這三大件的作…

AI幻覺終結之后:GPT-5開啟的“可靠性”新賽道與開發者生存指南

摘要&#xff1a; Sam Altman關于GPT-5將基本終結幻覺的宣告&#xff0c;不僅僅是一次技術升級&#xff0c;它標志著一個“萬物皆可AI&#xff0c;但萬事皆需驗證”的混亂時代的結束。本文將從一個全新的戰略視角出發&#xff0c;探討當“可靠性”取代“創造性”成為AI競賽的核…

ubuntu遠程桌面很卡怎么解決?

服務端方案 完成XRDP的性能優化配置&#xff1a; 1. 首先檢查當前的xrdp.ini文件 grep -n "tcp_send_buffer_bytes" /etc/xrdp/xrdp.ini2. 編輯xrdp.ini文件&#xff0c;修改TCP發送緩沖區大小 sudo sed -i s/#tcp_send_buffer_bytes32768/tcp_send_buffer_bytes4194…