当前位置: 首页 > news >正文

DeepSeek LeetCode 3630. 划分数组得到最大异或运算和与运算之和 Java实现

```java
class Solution {
public long maximizeXorAndXor(int[] nums) {
int n = nums.length;
int totalMasks = 1 << n; // 2^n
int allMask = totalMasks - 1;

// 预计算所有子集的按位与、异或和或的值
int[] andVal = new int[totalMasks];
int[] xorVal = new int[totalMasks];
int[] orVal = new int[totalMasks];

// 空集:异或=0,或=0,与用-1占位,后续再修正为0
andVal[0] = -1;
xorVal[0] = 0;
orVal[0] = 0;

for (int mask = 1; mask < totalMasks; mask++) {
// 提取最低位的1
int lb = mask & -mask;
int idx = Integer.numberOfTrailingZeros(lb);
int prev = mask ^ lb; // 移除该元素后的子集

xorVal[mask] = xorVal[prev] ^ nums[idx];
// 前一个子集为空时,与结果直接为该元素
andVal[mask] = (prev == 0) ? nums[idx] : (andVal[prev] & nums[idx]);
orVal[mask] = orVal[prev] | nums[idx];
}
// 将空集的与修正为0
andVal[0] = 0;

long best = 0;

// 枚举B子集
for (int bMask = 0; bMask < totalMasks; bMask++) {
int remainMask = allMask ^ bMask; // 分配给A和C的元素

// 剪枝:理论上界都无法超越当前最优则跳过
// maxAndB = andVal[bMask], max(A^C) <= OR(remain), 因为异或结果的每一位不会超过或运算
if (andVal[bMask] + (long) orVal[remainMask] * 2 - xorVal[remainMask] <= best) {
continue;
}

// 枚举A子集(A是remainMask的子集)
for (int aMask = remainMask; ; aMask = (aMask - 1) & remainMask) {
int cMask = remainMask ^ aMask;
long sum = (long) xorVal[aMask] + andVal[bMask] + xorVal[cMask];
if (sum > best) {
best = sum;
}
if (aMask == 0) break;
}
}

return best;
}
}
```

核心思路与复杂度

这道题数据范围n <= 19,是典型的状态压缩枚举题。

1. 解法思想

· 子集枚举:数组长度最大19,可以用位掩码表示每个元素属于哪个子集。枚举B子集的所有情况,再从剩余元素中枚举A子集,C自然确定。
· 预计算加速:提前算出所有子集的异或、与、或值,枚举时直接查表,避免重复计算。
· 剪枝优化:利用XOR(A) + XOR(C) <= OR(A∪C) * 2 - XOR(A∪C)这个上界进行剪枝,能跳过很多无效枚举。

2. 时间复杂度

· O(3^n):枚举B (2^n),枚举其子集A平均(3^n/2^n),总枚举量3^n。n <= 19时约1.16e9,但剪枝后实际运行会快很多。

http://www.jsqmd.com/news/1232933/

相关文章:

  • YOLO部署中的后处理优化:NMS的GPU加速实现与Python层后处理的性能陷阱
  • Unity跨平台文件对话框实战:从原生API到CompactStandaloneFileBrowser
  • mdapy:高效分子动力学分析工具全解析
  • 使用libtcc实现C语言动态编译与JIT技术
  • 本地服务企业网站的内容工程:Next.js、Prisma、SQLite、Docker与GEO实践
  • C++智能仓储系统性能优化:从内存管理到并发重构的工程实践
  • AI时代如何捍卫创作者表达权?ArtArch的创新实践
  • TI eHRPWM寄存器深度解析:从时基到死区的电机控制实战配置
  • 2026实力之选:物流服务公司——高效运输、智能仓储与优质服务实力之选 - 甄选服务推荐
  • 硬件课程设计优化服务的商业价值与技术实践
  • 单片机芯片烧录全流程解析与实战指南
  • UE5光照与阴影实战指南:从核心原理到性能优化
  • 现代C++智能指针与RAII实战指南:从原理到应用场景
  • 3分钟解锁Wand高级功能:告别付费墙的终极方案
  • 多AI协作开发如何避免“自己写、自己审”:Codex、Claude Code与工程验收闭环
  • ISP色度处理与自动控制:从YUV采样到H3A统计的工程实践
  • JDK 8升级高版本JDK的完整指南与实战经验
  • HarmonyOS开发实战: EmailFeedbackPage 意见反馈 + AboutPage 关于页
  • RTX 5090显卡深度评测:DLSS 4与散热创新解析
  • 2026 年新发布:栾川热门的干法施工隔墙板厂商推荐,揭秘:墙体隔断的未来,干法施工板能帮你省下多少钱? - 行业鉴选官
  • PDF、Word、HTML、Markdown、图片等文档解析工具MinerU和Docling
  • FreeRTOS学习(三)——任务状态和调度器运行过程
  • 深入解析MMC/SD/SDIO控制器:中断、DMA与缓冲区管理协同机制
  • 红黑树原理与实现:从2-3-4树到工程实践
  • HarmonyOS开发实战:图片全屏查看器:Swiper 轮播 + 缩略图导航
  • 双语疗愈文学创作:心理学与跨文化表达的融合
  • 开源身份管理平台Logto:快速集成OIDC/OAuth 2.0与社交登录
  • C#调用C++类实战:P/Invoke封装与内存管理详解
  • 粉笔APP考点地图功能:一眼看清你的知识盲区
  • Simulink模型开发与单片机结合的实践指南