尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
豆包 专家    LeetCode 3287. 求出数组中最大序列值 Java实现
题目正确题意给你一个整数数组 nums 和正整数 k 需要选出长度为 2*k 的子序列将其均分为前后各 k 个元素- 前半段所有元素做按位或得到值 A- 后半段所有元素做按位或得到值 B- 序列值 A XOR B求所有合法子序列中的最大序列值 。核心观察- 数值范围 1 nums[i] 2^7 128 因此任意个元素按位或的结果最多只有 128 种可能这是优化的关键。- 采用前后缀DP 枚举分割点的思路预处理前缀选j个的所有可能或值、后缀选j个的所有可能或值再枚举前后段的分割点遍历所有或值组合求异或最大值。Java 完整实现javapublic class Solution {public int maxValue(int[] nums, int k) {int n nums.length;final int MAX_VAL 1 7; // 数值小于128或结果最多128种// pre[i][j][v]前i个元素中选j个按位或结果为v是否可达boolean[][][] pre new boolean[n 1][k 1][MAX_VAL];pre[0][0][0] true;for (int i 1; i n; i) {int num nums[i - 1];for (int j 0; j k; j) {// 不选当前元素直接继承前i-1个的结果System.arraycopy(pre[i - 1][j], 0, pre[i][j], 0, MAX_VAL);// 选当前元素从j-1个的状态转移if (j 0) {for (int v 0; v MAX_VAL; v) {if (pre[i - 1][j - 1][v]) {pre[i][j][v | num] true;}}}}}// suf[i][j][v]从下标i到数组末尾选j个按位或结果为v是否可达boolean[][][] suf new boolean[n 1][k 1][MAX_VAL];suf[n][0][0] true;for (int i n - 1; i 0; i--) {int num nums[i];for (int j 0; j k; j) {// 不选当前元素继承后i1个的结果System.arraycopy(suf[i 1][j], 0, suf[i][j], 0, MAX_VAL);// 选当前元素从j-1个的状态转移if (j 0) {for (int v 0; v MAX_VAL; v) {if (suf[i 1][j - 1][v]) {suf[i][j][v | num] true;}}}}}int ans 0;// 枚举分割点前split个元素选k个后n-split个元素选k个for (int split k; split n - k; split) {boolean[] leftOr pre[split][k];boolean[] rightOr suf[split][k];// 遍历所有可能的或值组合求异或最大值for (int a 0; a MAX_VAL; a) {if (leftOr[a]) {for (int b 0; b MAX_VAL; b) {if (rightOr[b]) {ans Math.max(ans, a ^ b);}}}}}return ans;}}复杂度分析1. 时间复杂度O(n * k * 128 n * 128²)- 前后缀DP各 O(nk128)n最大400、k最大200、128是值域上限计算量极低。- 枚举分割点求最大值最多n个分割点每个点最多128*128次异或运算总开销可忽略。2. 空间复杂度O(n * k * 128)使用三维布尔数组存储可达状态。思路补充- 按位或的性质选的元素越多或结果不会变小且值域被限制在128以内因此用布尔数组标记可达结果比集合更高效。- 分割点的意义保证前半段和后半段的元素完全不重叠对应子序列的前后k个元素来自数组不同区间天然满足子序列的下标递增要求。需要我补充空间优化版的一维DP实现吗
RELATED

相关推荐

Claude Opus 4.7深度解析:从对话助手到推理协作者的范式跃迁

Claude Opus 4.7深度解析:从对话助手到推理协作者的范式跃迁

1. 这不是一次常规升级:Opus 4.7的本质是一场“能力重构”而非“性能迭代”我用Opus 4.7跑了整整11天,从凌晨三点的代码调试到清晨通勤路上的创意构思,从给客户写商业分析报告到帮孩子改作文,几乎覆盖了所有我能想到的中文高阶使用…

📅 2026/9/20 17:49:25
MPC8240嵌入式SoC架构解析:PowerPC核心与高度集成外设的经典设计

MPC8240嵌入式SoC架构解析:PowerPC核心与高度集成外设的经典设计

1. MPC8240:一款被低估的嵌入式“瑞士军刀”在二十世纪末到二十一世纪初的嵌入式系统黄金时代,工程师们面临着一个经典矛盾:一方面,应用对处理性能、I/O带宽和系统集成度的要求越来越高;另一方面,成本、功…

📅 2026/9/16 10:29:42
MC68HC912BD32工作模式与内存映射:嵌入式开发的架构基石

MC68HC912BD32工作模式与内存映射:嵌入式开发的架构基石

1. 项目概述:深入MC68HC912BD32的“心脏”与“地图”在嵌入式开发的世界里,尤其是面对像MC68HC912BD32这类经典的16位微控制器时,很多开发者往往一头扎进外设驱动和应用逻辑的编写,却忽略了两个最根本的“地基”:工作模…

📅 2026/9/22 17:09:05
MORE NEWS

更多资讯

📰

单列索引与多列索引:从典型查询看索引设计

单列索引与多列索引:从典型查询看索引设计 文章目录单列索引与多列索引:从典型查询看索引设计一、从一个常见查询说起二、单列索引是什么三、多列索引是什么四、最左前缀原则五、单列索引和多列索引的核心区别六、典型场景:到底该建哪种索引&…

📰

RISC-V开发板实战:将Bao Hypervisor移植到RVA23的完整指南

1. 从一块开发板说起:为什么要折腾Bao到RVA23第一次拿到 Banana Pi BPI-SM10 这块板子的时候,我盯着它看了很久。RISC-V 架构、RVA23 指令集规范、多核 SMP 设计,这些标签堆在一起,意味着它和市面上常见的 ARM 开发板完全不是一回…

📰

RVA23开发板移植Bao hypervisor与FreeRTOS实战

1. 为什么要把 Bao 搬到 RVA23 开发板上第一次拿到 Banana Pi BPI-SM10 这块板子的时候,我盯着它看了很久。RISC-V 架构、RVA23 指令集规范、多核 SMP、板载 PCIe 和一堆外设接口,纸面参数确实漂亮,但真正让我兴奋的不是硬件本身,…

📰

智慧工厂安全应急管理系统:UWB定位与气体监控技术落地拆解

简介:这份PPT资源聚焦智慧工厂安全应急管理系统解决方案,面向化工、制造等高风险行业的安全生产管理人员、信息化建设者及应急体系设计者,帮助理解如何借助物联网、大数据与人工智能提升工厂安全管理与应急响应能力。压缩包内为1个pptx文件&a…

📰

[特殊字符] Aider 小白安装教程(Windows / macOS / Linux):用 TaoToken 统一 Key 打通配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

MCP 打通 InoProShop 与 Claude Code:PLC 编程自动化实践

1. 为什么要把 InoProShop、Claude Code 和 MCP 串在一起如果你同时接触过工业自动化和 AI 编程工具这两个圈子,大概率会有一种割裂感:一边是 InoProShop 这类 PLC 编程环境,讲究的是确定性、实时性和现场调试;另一边是 Claude Co…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬