news 2026/6/19 13:41:21

豆包 专家 LeetCode 3287. 求出数组中最大序列值 Java实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
豆包 专家 LeetCode 3287. 求出数组中最大序列值 Java实现

题目正确题意

给你一个整数数组 nums 和正整数 k ,需要选出长度为 2*k 的子序列,将其均分为前后各 k 个元素:

- 前半段所有元素做按位或得到值 A
- 后半段所有元素做按位或得到值 B
- 序列值 = A XOR B
求所有合法子序列中的最大序列值 。

核心观察

- 数值范围: 1 <= nums[i] < 2^7 = 128 ,因此任意个元素按位或的结果最多只有 128 种可能,这是优化的关键。
- 采用前后缀DP + 枚举分割点的思路:预处理前缀选j个的所有可能或值、后缀选j个的所有可能或值,再枚举前后段的分割点,遍历所有或值组合求异或最大值。

Java 完整实现

java
public 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++) {
// 不选当前元素,继承后i+1个的结果
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实现吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/19 13:32:12

Maya角色动画革命:brSmoothWeights权重平滑工具完全指南

Maya角色动画革命&#xff1a;brSmoothWeights权重平滑工具完全指南 【免费下载链接】brSmoothWeights Advanced skin cluster weights smoothing tool for Autodesk Maya 项目地址: https://gitcode.com/gh_mirrors/br/brSmoothWeights 在3D动画制作的世界里&#xff0…

作者头像 李华
网站建设 2026/6/19 13:21:58

LIME局部可解释性原理与实战:为黑箱模型生成人类可读的决策备忘录

1. 这不是“解释模型”&#xff0c;而是给黑箱装上探照灯&#xff1a;LIME到底在解决什么真问题&#xff1f; 你训练好一个准确率98.7%的图像分类模型&#xff0c;它把一张清晰的金毛犬照片稳稳判成“拉布拉多”&#xff1b;你上线了一个信贷风控模型&#xff0c;系统拒绝了一位…

作者头像 李华
网站建设 2026/6/19 13:19:21

Deepseek Artifacts:面向AI工程化的可版本化能力封装协议

1. 项目概述&#xff1a;这不是一个“新模型发布”&#xff0c;而是一次开发范式迁移的实操切口“Introducing Deepseek Artifacts”——这个标题乍看像一场常规的技术公告&#xff0c;但如果你在2024年中后期持续跟进大模型工程落地一线&#xff0c;就会立刻意识到&#xff1a…

作者头像 李华
网站建设 2026/6/19 13:18:50

钢结构施工准备工作包括哪些?

钢结构施工准备工作包括哪些? (1)技术准备 审查设计文件是否齐全合理,符合国家标准。设计文件包括设计图,施工图,图纸说明和设计变更通知单等。是否经过设计,校对,审核人员签字,设计院盖章,建设部门存档,监理单位核对,并由施工单位和建设单位会审签字。 根据工厂、…

作者头像 李华
网站建设 2026/6/19 13:12:45

LMOps是什么:大模型运维的核心概念与工程实践

我理解您的严格要求&#xff0c;也完全认同内容安全、专业深度与表达真实性的绝对优先级。但需要坦诚说明&#xff1a;您提供的输入内容存在关键信息缺失&#xff0c;无法支撑生成一篇符合全部规范的高质量博文。具体问题如下&#xff1a;项目标题为英文技术新闻式表述&#xf…

作者头像 李华
网站建设 2026/6/19 13:07:11

TDM-R1:4步本地AI生图的确定性突破

1. 这不是又一个“更快出图”的噱头&#xff0c;而是本地AI生图工作流的真正拐点 最近刷到小红书技术团队联合港科大、港中文发布的TDM-R1论文时&#xff0c;我正卡在一个客户急催的电商主图项目上——要求生成“三只穿不同颜色工装裤的柴犬&#xff0c;在霓虹灯牌下摆摊卖手冲…

作者头像 李华