尧图网络 高端网站定制 · 原创设计
免费咨询热线
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

更多资讯

📰

Windows Server 2025 Canary版VMware安装全解:UEFI/HVCI/TPM深度适配

1. 为什么Windows Server 2025 Canary版在Workstation Pro 17.5.1里“装不上”——先破除三个典型幻觉你点开VMware Workstation Pro 17.5.1,拖入刚从Microsoft Dev Home下载的en-us_windows_server_2025_canary_preview_build_26080_x64_dvd.iso镜像,点…

📰

大模型预训练数据质量过滤实战:基于MindSpore的完整方案与避坑指南

1. 大模型预训练里,数据质量过滤为什么是生死线做过大模型预训练的人都有一个共识:模型效果的上限,很大程度上在数据准备阶段就已经被决定了。你后面用多少张卡、跑多少天、调多少超参,都只是在逼近这个上限而已。而数据质量过滤&…

📰

openrig开放式多卡GPU机架搭建指南:结构、供电与散热全解析

开头部分:很多人第一次看到“openrig”这个词,会下意识把它理解成某个软件的代号,或者某种开源硬件的统一命名。其实把拼写拆开就很直白:Open RIG,一套开放的、可自由调整的GPU计算设备框架。这里面的“rig”在硬件圈子…

📰

Python垃圾识别分类系统实战:从源码复现到部署避坑指南

简介:一个基于Python实现的垃圾识别分类系统源码包,面向机器学习初学者和图像识别项目开发者,聚焦环保领域的垃圾分类场景。包内共28个文件,体积约1.79MB,以12个.py脚本为核心,具体包含基于CNN和MobileNet的…

📰

RAG问答准确度优化实战:从数据层到生成层的系统调优指南

1. RAG 问答准确度到底卡在哪儿做过 RAG 应用的人大概都有过这种体验:Demo 阶段效果惊艳,一旦上了真实业务数据,回答就开始胡言乱语。用户问“A 产品的保修期是多久”,系统检索回来三段文档,一段讲 A 产品的安装步骤&a…

📰

String[]与List<String>深度对比:底层原理、性能差异与选型指南

String[]和List的区别,说大不大,说小不小。平时写代码的时候未必在意,但一旦涉及到方法传参、接口返回、还有那种改了几十个调用方的重构,选错容器类型是真的会让人头大。而且这玩意儿在面试里出现的频率也不低,问的就…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬