Kimi LeetCode LCP 14. 切分数组 Java实现

发布时间:2026/10/8 9:23:50

Kimi    LeetCode LCP 14. 切分数组 Java实现 以下是 LeetCode LCP 14. 切分数组 的 Java 实现基于 质因数分解 动态规划 的经典解法。解题思路1. 预处理最小质因数用线性筛预处理出 110⁶ 每个数的最小质因数 minPrime[i]方便后续快速分解质因数2. 动态规划dp[i] 表示前 i 个数即 nums[0..i-1]能切分的最少数组个数3. 关键优化对每个质因数 p维护 pFlag[p] 表示以质因数 p 为桥梁连接时前序状态的最小值状态转移- 每个新数 nums[i] 要么单独成组dp[i1] dp[i] 1- 要么与前面某个有相同质因数的数组成一组找到前面有相同质因数的位置 j则 dp[i1] dp[j] 1javaclass Solution {// 预处理最小质因数线性筛private static final int MAX 1000000;private static int[] minPrime new int[MAX 1];private static boolean initialized false;private static void init() {if (initialized) return;// minPrime[i] 表示 i 的最小质因数for (int i 2; i MAX; i) {if (minPrime[i] 0) {// i 是质数for (int j i; j MAX; j i) {if (minPrime[j] 0) {minPrime[j] i;}}}}initialized true;}public int splitArray(int[] nums) {init();int n nums.length;// dp[i] 表示前 i 个数nums[0..i-1]能切分的最少数组个数int[] dp new int[n 1];// pFlag[p] 表示以质因数 p 为桥梁时前序状态的最小值// 初始化为一个较大值int[] pFlag new int[MAX 1];for (int i 0; i MAX; i) {pFlag[i] n; // 初始化为 n最大可能值}dp[0] 0; // 0个数需要0个子数组for (int i 1; i n; i) {int x nums[i - 1];// 默认情况当前数单独成一组dp[i] dp[i - 1] 1;// 分解 nums[i-1] 的所有质因数int temp x;while (temp 1) {int p minPrime[temp];// 找到之前出现过质因数 p 的位置// pFlag[p] 记录的是 dp[j] 的最小值其中 j 是前面某个以 p 为质因数的数的位置dp[i] Math.min(dp[i], pFlag[p] 1);// 更新 pFlag[p]当前位置 i-1 之前的状态 dp[i-1]// 注意这里存的是 dp[i-1]因为如果从 i 位置开始新的一组前面是 [0, i-2]pFlag[p] Math.min(pFlag[p], dp[i - 1]);// 去掉所有 p 因子while (temp % p 0) {temp / p;}}}return dp[n];}}关键点说明步骤 说明线性筛预处理 预处理 110⁶ 的最小质因数时间 O(MAX log log MAX)空间 O(MAX)质因数分解 利用 minPrime 数组每次除以最小质因数快速分解pFlag 数组 对每个质因数 p记录以 p 为桥梁时前序状态的最小 dp 值状态转移 dp[i] min(dp[i-1]1, min(pFlag[p]1))其中 p 是 nums[i-1] 的所有质因数复杂度分析- 时间复杂度O(MAX log log MAX n × log(nums[i]))其中 MAX 10⁶- 线性筛预处理O(MAX log log MAX)- 每个数分解质因数O(log nums[i])- 空间复杂度O(MAX n)主要是 minPrime 和 pFlag 数组示例验证输入: nums [2,3,3,2,3,3]输出: 2解释:- nums[0]2, 质因数2, pFlag[2]0, dp[1]1- nums[1]3, 质因数3, pFlag[3]1, dp[2]2- nums[2]3, 质因数3, pFlag[3]min(1,2)1, dp[3]min(3, pFlag[3]12)2- nums[3]2, 质因数2, pFlag[2]min(0,2)0, dp[4]min(3, pFlag[2]11)1- nums[4]3, 质因数3, pFlag[3]min(1,1)1, dp[5]min(2, pFlag[3]12)2- nums[5]3, 质因数3, pFlag[3]min(1,2)1, dp[6]min(3, pFlag[3]12)2最终 dp[6] 2对应 [2,3,3,2] 和 [3,3]
延伸阅读

更多相关文章

2026/10/7 5:29:00

2026新版Dify实战:从零部署到20+AI应用工作流搭建

最近在尝试将大模型能力集成到业务系统时,你是否也遇到过这样的困境:调用API接口虽然简单,但想实现一个包含条件判断、多模型调用、知识库检索的复杂AI应用,就需要写大量的胶水代码,调试起来更是让人头疼。Dify的出现&…

2026/10/7 5:30:57

Windows环境容器化:用Docker管理开发环境依赖冲突

最近在整理本地开发环境时,我遇到了一个典型的“环境污染”问题:一个项目依赖特定版本的 .NET Framework,另一个项目需要 Python 3.11,而第三个项目又要求某个老旧的 Java 8 环境。在 Windows 上,这种依赖冲突和版本管…

2026/10/7 5:31:09

云服务配额异常排查:升级后速率限制未生效的实战指南

这次我们来看一个在开发者社区中引发讨论的技术问题:“Max 20x upgrade not reflected in weekly limits, depleting at Max 5x rate”。这并非一个具体的开源项目,而是一个典型的云服务或API配额管理异常现象。简单来说,用户购买了号称“20倍…

2026/10/8 9:18:49

eNSP命令大全:华为网络设备配置与排错实战指南

简介:这份资源是华为eNSP网络模拟器的命令速查手册,面向正在学习华为路由交换与防火墙配置的初学者及备考HCIA/HCIP的考生。它把设备常用命令集中整理成册,解决实验时频繁百度、翻书查命令的痛点,帮助读者在搭建拓扑、调试设备时快…

2026/10/8 9:18:49

最大乘积问题:为什么整数拆分要尽量拆3?数学推导与OJ实战

刷东华大学OJ刷到第39题“最大乘积”时,我一开始真没当回事。题面就一句话:把一个正整数n拆成若干个正整数之和,问这些正整数乘积的最大值是多少。当时我第一反应是DFS暴力枚举所有拆法,第二反应是这不就是动态规划模板题吗。直到…

2026/10/8 9:18:49

最大乘积动态规划陷阱:为何要同时维护最大值与最小值

东华大学OJ第39题“最大乘积”,做过的同学都知道,这题表面上是道动态规划入门题,实际上是个暗藏杀机的陷阱题。我第一次提交的时候,信誓旦旦觉得自己写对了,结果WA了好几次,最后才意识到这题跟常规的“最大…

2026/10/8 9:18:49

Superpowers:智能增强型开发者工具链实战指南

1. “Superpowers”不是超能力,而是开发者工具链的智能增强范式你最近在技术社区、开发群聊甚至GitHub trending里反复刷到“superpowers”这个词,它既不像传统框架那样有明确文档,也不像编程语言那样自带语法规范——它更像一个正在快速凝聚…

2026/10/8 9:18:49

Claude Code技能包superpowers实战:从安装到工程化工作流

如果你最近开始重度使用 Claude Code 这类跑在终端里的 AI 编程助手,大概很快就会撞上一个情景:模型本身很能打,你问什么它答什么,可一旦任务跨了好几个文件、需要来回验证,它就容易东一榔头西一棒子,把前面…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑