LeetCode 1442:异或相等三元组的高效解法

发布时间:2026/8/11 4:38:10

LeetCode 1442:异或相等三元组的高效解法
1. 题目解析与核心概念这道题目来自LeetCode第1442题题目描述如下给定一个整数数组arr我们需要统计能够形成两个异或相等数组的三元组(i, j, k)的数目其中0 ≤ i j ≤ k arr.length。首先我们需要明确几个关键概念三元组(i, j, k)表示数组中的三个索引位置满足i j ≤ k的关系异或(XOR)运算按位异或操作相同为0不同为1异或相等数组题目中定义a arr[i] ^ arr[i1] ^ ... ^ arr[j-1]b arr[j] ^ arr[j1] ^ ... ^ arr[k]要求a b理解这个题目需要掌握异或运算的一个重要性质如果a ^ b 0那么a b。这个性质是解决本题的关键。2. 异或运算的性质与应用异或运算有几个非常重要的性质在解决这个问题时需要充分理解交换律a ^ b b ^ a结合律a ^ (b ^ c) (a ^ b) ^ c自反性a ^ a 0恒等性a ^ 0 a基于这些性质我们可以推导出一个重要的结论如果a ^ b 0那么a b。这个结论直接对应题目中要求a b的条件。另一个关键点是异或前缀和的概念。我们可以预先计算一个前缀异或数组xor其中xor[i]表示arr[0] ^ arr[1] ^ ... ^ arr[i-1]。这样任意子数组arr[i..j]的异或和可以表示为xor[j1] ^ xor[i]。3. 暴力解法与分析最直观的解法是使用三重循环枚举所有可能的三元组(i, j, k)然后计算a和b的值进行比较def countTriplets(arr): n len(arr) count 0 for i in range(n): for j in range(i1, n): a 0 for x in range(i, j): a ^ arr[x] for k in range(j, n): b 0 for y in range(j, k1): b ^ arr[y] if a b: count 1 return count这个解法的时间复杂度是O(n^4)因为有三重循环且在最内层还有计算a和b的循环。对于较大的n来说这种解法显然效率太低无法通过LeetCode的测试用例。4. 优化思路与数学推导我们需要寻找更高效的解法。根据异或的性质我们知道如果a b那么a ^ b 0。而根据前缀异或的定义a ^ b (arr[i] ^ ... ^ arr[j-1]) ^ (arr[j] ^ ... ^ arr[k]) arr[i] ^ ... ^ arr[k] xor[k1] ^ xor[i]因此a b等价于xor[k1] ^ xor[i] 0即xor[k1] xor[i]。这意味着对于任意i和k如果xor[k1] xor[i]那么对于i和k之间的任意ji j ≤ k三元组(i, j, k)都满足题目条件。因此这样的(i, k)对对应的有效j的数目是k - i。基于这个观察我们可以将问题转化为统计所有满足xor[k1] xor[i]的(i, k)对然后对每个这样的对累加k - i到结果中。5. 优化后的算法实现基于上述推导我们可以实现一个O(n^2)的解法def countTriplets(arr): n len(arr) xor [0] * (n 1) for i in range(n): xor[i1] xor[i] ^ arr[i] count 0 for i in range(n): for k in range(i1, n): if xor[k1] xor[i]: count (k - i) return count这个解法首先计算前缀异或数组xor然后双重循环遍历所有可能的i和ki k检查xor[k1]是否等于xor[i]如果相等则累加k - i到结果中。6. 进一步优化到O(n)我们可以进一步优化这个解法到O(n)时间复杂度。观察到对于每个k我们需要统计前面所有i满足xor[i] xor[k1]的(k - i)之和。我们可以使用一个哈希表来记录每个异或值出现的次数和位置索引的和。具体来说维护一个字典记录每个异或值出现的次数count和所有出现该异或值的索引i的和total对于每个位置k计算当前前缀异或xor[k1]如果xor[k1]在字典中则结果增加count * k - total更新字典将当前xor[i]即xor[k]的信息存入字典实现代码如下def countTriplets(arr): n len(arr) xor 0 count_map {0: (1, 0)} # (count, total_index_sum) res 0 for k in range(n): xor ^ arr[k] if xor in count_map: cnt, total count_map[xor] res cnt * k - total # 更新xor ^ arr[k]的信息即xor[i]的信息 if xor in count_map: cnt, total count_map[xor] count_map[xor] (cnt 1, total k 1) else: count_map[xor] (1, k 1) return res这个解法只需要一次遍历数组时间复杂度降为O(n)空间复杂度为O(n)用于存储哈希表。7. 代码实现细节与测试让我们详细分析一下最优解法的实现细节初始化xor为0表示空数组的异或和初始化count_map记录异或值为0出现了1次位置索引和为0遍历数组计算当前的前缀异或xor ^ arr[k]如果当前xor在count_map中说明存在i使得xor[i] xor[k1]可以形成有效三元组计算结果res cnt * k - totalcnt是相同异或值出现的次数total是这些i的和更新count_map将当前xor实际上是xor[i]的值的信息存入测试用例示例print(countTriplets([2,3,1,6,7])) # 输出4 print(countTriplets([1,1,1,1,1])) # 输出10 print(countTriplets([2,3])) # 输出0 print(countTriplets([1,3,5,7,9])) # 输出38. 复杂度分析与比较让我们比较一下三种解法的复杂度暴力解法O(n^4)时间O(1)空间前缀异或优化O(n^2)时间O(n)空间哈希表优化O(n)时间O(n)空间在实际应用中当n较大时如n10^5只有O(n)的解法能够在合理时间内完成。对于LeetCode的测试用例O(n^2)的解法通常也能通过但O(n)是最优解。空间复杂度方面O(n)的解法需要额外的哈希表空间但在现代计算机上这对于中等规模的数组来说不是问题。9. 常见错误与调试技巧在实现这个算法时容易犯的几个错误索引处理错误特别是在计算前缀异或数组时xor[i]表示arr[0..i-1]的异或和容易混淆i的起始位置哈希表更新时机错误应该在计算完结果后再更新哈希表否则会包含当前元素自身三元组条件理解错误必须满足i j ≤ k不能有i j或j k的情况调试技巧对于小数组手动计算几个例子的结果验证代码正确性打印中间变量如前缀异或数组检查计算是否正确使用LeetCode的测试用例和自定义边界条件测试10. 扩展思考与类似题目这个问题可以扩展到更一般的情况比如统计满足其他位运算条件的子数组如AND、OR等统计满足多个条件的复合三元组在树或其他数据结构上应用类似的异或性质类似题目推荐LeetCode 1310. 子数组异或查询LeetCode 1720. 解码异或后的数组LeetCode 1734. 解码异或后的排列这些题目都利用了异或运算的性质来优化解法掌握这些技巧可以大大提高解决位运算相关问题的能力。

相关新闻

目前好用的AI工具有哪些?

目前好用的AI工具有哪些?

2026/8/11 4:38:09

最近在使用一个AI学习平台Lynote AI值得推荐给大家:https://lynote.ai/,这款AI工具大部分功能都可以免费使用,主要面向学生、科研人员和办公群体,是一款集 AI 文本人性化改写、AI内容检测、AI图像检测、PDF压缩、AI笔记、视频/音频…

云原生技术解析:从微服务到Kubernetes的架构演进与实践

云原生技术解析:从微服务到Kubernetes的架构演进与实践

2026/8/11 4:28:09

1. 从“云”到“原生”:一个技术范式的根本转变聊到“云原生”,很多朋友的第一反应可能是:“哦,就是把应用搬到云服务器上跑呗。” 如果几年前你这么理解,问题不大。但今天,这个理解就有点“过时”了。我干…

Showell仿真操作说明

Showell仿真操作说明

2026/8/11 4:28:09

1. 使用前准备 1.1 运行环境 • Windows 64位操作系统。 • 已安装对应 PLC 工程软件:西门子 TIA Portal / S7-PLCSIM,或三菱 GX Works2 / GX Works3。 • 连接西门子仿真 PLC,需要准备 NetToPLCsim;连接三菱 PLC 或三菱仿真环…

Unity Shader自动化对比工具:从原理到实践,打造视觉回归测试

Unity Shader自动化对比工具:从原理到实践,打造视觉回归测试

2026/8/11 5:38:13

1. 项目概述:为什么我们需要一个Shader效果自动化对比工具?在Unity开发中,Shader是创造视觉魔法的核心。无论是实现一个逼真的水面反射,还是一个风格化的卡通渲染,Shader的编写和调试都占据了美术和TA(技术…

AI 可观测性开发短记:证据链怎样保留

AI 可观测性开发短记:证据链怎样保留

2026/8/11 5:38:13

AI 可观测性开发短记:证据链怎样保留 处理AI 基础设施时,我会先拿到请求入口、依赖调用和运行信号采集的现状材料:接口定义、部署清单或运行记录。没有这些材料,讨论“典型线上故障的定位证据链”很容易变成套话。 AI 应用基础设施…

让大模型跑在小芯片上的工程挑战记录:部署前别漏掉这些配置

让大模型跑在小芯片上的工程挑战记录:部署前别漏掉这些配置

2026/8/11 5:38:13

让大模型跑在小芯片上的工程挑战记录:部署前别漏掉这些配置 在 8GB 甚至 4GB 内存的端侧板卡上部署 3B / 0.5B 级别的端侧小语言模型(SLM),极度考验底层工程治理。许多项目在开发阶段运行良好,一放到生产环境&#xff…

OpenStack存储卷卸载(Detach)操作全解析与运维实践

OpenStack存储卷卸载(Detach)操作全解析与运维实践

2026/8/11 5:38:13

1. 运维视角下的Detach Volume操作本质在OpenStack的日常运维中,存储卷(Volume)的挂载(Attach)与卸载(Detach)是最基础也最频繁的操作之一。表面看这只是简单的存储资源分配与回收,但实际运维中这个操作涉及存储后端、计算节点、虚拟化层和网络配置的多方…

《新建文件夹》游戏启示:从数字混沌到有序创作的实用框架

《新建文件夹》游戏启示:从数字混沌到有序创作的实用框架

2026/8/11 5:38:13

你有没有遇到过那种情况——一个项目文件夹,名字就叫“新建文件夹”,里面塞满了各种半成品、废弃的草稿、临时测试文件,还有一堆你自己都忘了是干嘛用的东西。它像一个数字黑洞,吞噬着你的时间和精力,每次打开都需要鼓…

LangChain.js工具链实战:赋予大语言模型外部调用能力

LangChain.js工具链实战:赋予大语言模型外部调用能力

2026/8/11 5:28:13

1. 项目概述:LangChain.js 工具链的实战价值 如果你正在用LangChain.js构建AI应用,大概率会遇到一个核心痛点:大语言模型(LLM)本身就像一个知识渊博但“手无寸铁”的顾问。它能和你聊得天花乱坠,但当你需要…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/10 5:58:32

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/10 7:54:12

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/10 7:19:21

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

Unity新手入门:从零搭建开发环境与核心概念解析

Unity新手入门:从零搭建开发环境与核心概念解析

2026/8/11 0:07:41

1. 项目概述:为什么Unity是游戏开发者的首选起点如果你对游戏开发感兴趣,或者想进入这个充满创造力的行业,那么“Unity”这个名字你肯定不陌生。它几乎是所有新手开发者、独立游戏团队,甚至是一些3A大厂在特定项目上的首选引擎。为…

Agency-Agents 智能体系统从零搭建实战指南

Agency-Agents 智能体系统从零搭建实战指南

2026/8/11 0:07:41

在开发复杂应用时,我们常常遇到单一模型难以兼顾全局规划与细节执行的困境。有时候,模型擅长创意生成却在逻辑推理上稍显吃力,或者精于代码编写却缺乏对业务上下文的深刻理解。为了解决这个问题,多智能体协作架构应运而生&#xf…

MiniMax 权益码 Token Plan 套餐 9 折优惠,Token Plan 共建邀请计划 至2026.8.31

MiniMax 权益码 Token Plan 套餐 9 折优惠,Token Plan 共建邀请计划 至2026.8.31

2026/8/11 0:07:41

🚀 MiniMax Token Plan MiniMax 推出全新 Token 计划,新增语音、音乐、视频和图片生成权益。 用户邀请好友可享双重福利 订阅一份套餐,解锁最新模型 —— 前沿 Coding 能力、1M 超长上下文、原生多模态,图文音视频共用套餐额度。 …

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/8 2:30:15

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…