尧图网络 高端网站定制 · 原创设计
免费咨询热线
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/26 9:38:06
MPC8240嵌入式SoC架构解析:PowerPC核心与高度集成外设的经典设计

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

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

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

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

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

📅 2026/9/27 10:51:55
MORE NEWS

更多资讯

📰

基于深度学习的智能坐姿检测系统:Python+PyTorch实战

简介:面向计算机视觉与人工智能方向的学生,一套基于深度学习的智能坐姿检测完整源码与配套数据集,可满足课程设计、期末大作业或毕业设计的落地需求。整个项目以Python实现,核心代码覆盖数据读取与预处理、模型结构定义、训练流程…

📰

微机原理与接口技术 · 第4章《汇编语言及其程序设计》知识点

微机原理与接口技术 第4章《汇编语言及其程序设计》知识点梳理 本文整理自福州大学吴衔誉教授《微机原理与接口技术》第四章课件,系统讲解汇编语言简介、指令分类与条件域、寻址方式、Cortex-M3 指令集(数据传送 / 数据处理 / 跳转 / 其他)以…

📰

开源油藏模拟器OPM/Flow实战:安装部署与Eclipse差异化对比

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

📰

CSS动效核心机制与高频效果实战解析

做前端这些年,我把大量时间都花在“让页面动起来”这件事上,沉淀下来的关键词也就两个:CSS动效。不管是给按钮加涟漪,还是给卡片加3D翻转,底层机制都逃不开两套东西:transition和animation。很多人看到效果…

📰

YOLOv8猴子检测权重训练:从数据集标注到模型部署全流程

简介:一套面向目标检测场景的猴子识别资源,包含YOLOv8预训练权重与配套数据集。资源整合了6000余张标注为Monkey的猴子图像,已按train、val、test划分完毕,并附有data.yaml配置文件和TXT格式的标签,可直接对接YOLOv5、…

📰

Cursor Opus极速模式值不值?TaoToken统一API通道实测与配置避坑指南

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

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬