首页/新闻资讯/正文详情

动态规划解LeetCode乘积最大子数组问题

发布时间:2026/11/14 15:00:54 来源:云帆数科 栏目:资讯中心
动态规划解LeetCode乘积最大子数组问题
1. 问题概述与核心挑战遇到LeetCode第152题乘积最大子数组时很多人的第一反应可能是借鉴经典的最大子序和Kadane算法思路。但实际动手后会发现乘积的特性让这个问题变得棘手得多。我最初尝试用类似的动态规划方法时在测试用例[2,3,-2,4,-1]上就栽了跟头——明明局部最大值是6全局最大值却应该是48。这个问题的核心难点在于负数的存在会让乘积结果发生符号反转而当前的最小负乘积可能在遇到下一个负数时逆袭成为最大值。举个例子数组片段[3,-2,4]的max乘积是4但继续遇到-1时之前的最小乘积-24与-1相乘反而得到24而之前的最大乘积4与-1相乘却得到-42. 动态规划解法精讲2.1 状态定义与转移方程我们需要同时维护两个状态数组max_dp[i]以nums[i]结尾的子数组的最大乘积min_dp[i]以nums[i]结尾的子数组的最小乘积状态转移需要考虑三种情况从当前元素重新开始子数组nums[i]前一个最大乘积与当前元素相乘max_dp[i-1] * nums[i]前一个最小乘积与当前元素相乘min_dp[i-1] * nums[i]因此状态转移方程为max_dp[i] max(nums[i], max_dp[i-1]*nums[i], min_dp[i-1]*nums[i]) min_dp[i] min(nums[i], max_dp[i-1]*nums[i], min_dp[i-1]*nums[i])2.2 空间优化技巧观察发现每个状态只依赖于前一个状态因此可以将空间复杂度从O(n)优化到O(1)def maxProduct(nums): if not nums: return 0 max_prod min_prod result nums[0] for num in nums[1:]: candidates (num, max_prod*num, min_prod*num) max_prod, min_prod max(candidates), min(candidates) result max(result, max_prod) return result关键点必须同时计算max_prod和min_prod的新值后再更新否则会出现使用脏数据的情况3. 边界条件与特殊测试用例3.1 必须考虑的边界情况空数组题目说明至少包含一个数字但实际编码时建议处理单个元素数组直接返回该元素包含0的数组乘积会重置全负数数组如[-2,-3,-4]最大乘积是12而非单个元素交替正负数[2,-5,3,1,-2,4,-1]3.2 易错点警示初始化时容易错误地将max_prod和min_prod设为0或1忘记在每次迭代时更新全局result处理负数时没有考虑最小乘积可能逆袭空间优化版本中错误地分开计算max_prod和min_prod4. 复杂度分析与算法对比4.1 时间复杂度两种实现方式的时间复杂度都是O(n)原始DP遍历数组一次每次计算三个候选值优化版同样单次遍历每次进行固定次数的比较4.2 空间复杂度对比实现方式空间复杂度适用场景原始DP数组O(n)需要记录所有中间结果滚动变量优化O(1)仅需最终结果时首选5. 实际编码中的优化技巧5.1 并行赋值提升可读性Python中的并行赋值可以避免临时变量max_prod, min_prod max(num, max_prod*num, min_prod*num), min(num, max_prod*num, min_prod*num)5.2 使用数学库加速对于大型数组可以尝试使用numpyimport numpy as np def maxProduct(nums): nums np.array(nums) max_prod min_prod result nums[0] for num in nums[1:]: candidates np.array([num, max_prod*num, min_prod*num]) max_prod, min_prod candidates.max(), candidates.min() result max(result, max_prod) return result6. 同类问题扩展掌握了这个解法后可以解决以下变种问题乘积最小的子数组只需修改最终取值的逻辑乘积为正数的最大子数组长度LC 1567子数组乘积小于K的个数LC 713以LC 1567为例其解法同样需要维护最大正数和最大负数长度def getMaxLen(nums): pos neg res 0 for num in nums: if num 0: pos, neg pos 1, neg 1 if neg else 0 elif num 0: pos, neg neg 1 if neg else 0, pos 1 else: pos neg 0 res max(res, pos) return res7. 刷题经验分享在解决这类动态规划问题时我的个人经验是先写出暴力解法确保理解题意画出2-3个测试用例的状态转移过程特别注意负数对极值的影响先实现基础DP版本再考虑空间优化用极端测试用例验证边界条件对于乘积类问题一定要记住这个核心规律当前的最大值可能来自前一个最大值 × 正数前一个最小值 × 负数当前元素本身子数组重新开始这个思维模式同样适用于许多其他极值问题比如股票买卖问题中的状态转移。在实际面试中如果能清晰解释这个思维过程即使代码有小瑕疵面试官通常也会给予肯定。

相关推荐

个人智能体架构深度拆解:持久化记忆与个性化推理的工程实现
个人智能体架构深度拆解:持久化记忆与个性化推理的工程实现

你有没有碰过这种糟心事:明明每天都跟AI助手聊几句,它依然会在第三天问你“你有几个孩子”——而你上周刚跟它说过。我去年底开始折腾的个人智能体项目,给整套系统起了个代号叫“超体”,核心目标就是让它跳出“一次性问答工具”的… · 2026/11/10 0:12:36

AI原生企业架构:从补丁式赋能到操作系统级重构
AI原生企业架构:从补丁式赋能到操作系统级重构

1. 为什么“AI赋能”在传统企业里总像隔靴搔痒?我陪三家企业做过AI落地咨询,最后都卡在同一道坎上:业务部门说“AI模型很准,但用不起来”,IT部门说“API调得通,但不知道接哪儿”,高管说“投了钱… · 2026/11/5 4:13:58

SpringBoot植物健康管理系统设计与实现
SpringBoot植物健康管理系统设计与实现

1. 项目背景与需求分析在当今城市化和室内种植日益普及的背景下,植物健康管理已成为园艺爱好者和商业种植者的共同痛点。传统的人工观察记录方式效率低下,难以实现精准养护。这正是我们设计基于SpringBoot的植物健康管理系统的初衷。这个系统需要解决几个… · 2026/11/14 12:34:50

岳池县考电工证怎么报名?学历不高也能考的实操指南
岳池县考电工证怎么报名?学历不高也能考的实操指南

岳池县考电工证怎么报名?学历不高也能考的实操指南 你是不是觉得 学历不高怕报不上名 ?担心自己没文化、没背景、没资源,连最基本的电工证都考不了?别慌,我来给你说清楚, 岳池县考电工证怎么报名… · 2026/11/14 15:00:20

你学历不高怕报不上名?焊工电工证培训价格全攻略+官方报名入口详解
你学历不高怕报不上名?焊工电工证培训价格全攻略+官方报名入口详解

你学历不高怕报不上名?焊工电工证培训价格全攻略+官方报名入口详解 你学历不高怕报不上名?焊工电工证培训价格不透明,官方报名入口在哪?这些都不是问题!作为一名在河南从事施工行业多年的项目经理,我深知很多基层施工人员因学历限制,担心自己考不了证… · 2026/11/14 15:00:20

海口考低压电工证有效期多久
海口考低压电工证有效期多久

70岁老人考低压电工证真实经历:实操考试心里没底怕挂科怎么办 实操考试心里没底怕挂科,这是很多第一次报考低压电工证的人,尤其是年纪稍大的学员共同的焦虑。我之前在新乡也遇到不少类似情况,很多人担心自己跟不上节奏、记不住操作流程、怕出错被扣分。… · 2026/11/14 15:00:20

考试特种作业证怎么考?保姆级教程带你避坑
考试特种作业证怎么考?保姆级教程带你避坑

考试特种作业证怎么考?保姆级教程带你避坑 怕考不过白交培训费?别急,这期保姆级教程给你讲透特种作业证怎么考,从报名到拿证,再到证书丢了怎么补办,全都给你安排上。特种作业证不是随便考的,考不过不仅浪费钱,还可能影响你后续的晋升和工作机会。… · 2026/11/14 15:00:20

电工证有那些类型郑州报考避坑指南
电工证有那些类型郑州报考避坑指南

电工证有那些类型郑州报考避坑指南 实操考试心里没底怕挂科?这事儿我懂。去年我带过的一批郑州工程类毕业生,光是电工证实操考试就挂了三个人,不是操作流程不对,就是安全规范没搞清。今天咱们就从【电工证有那些类型】说起,看看在郑州报考的时候,你到底… · 2026/11/14 15:00:20

苏家屯考电工证在哪里 含金量高的证书怎么考
苏家屯考电工证在哪里 含金量高的证书怎么考

苏家屯考电工证在哪里 含金量高的证书怎么考 实操考试心里没底怕挂科?你不是一个人。很多在苏家屯准备考电工证的朋友都担心,考不过怎么办?是不是证书含金量也不高?别急,下面我们就来聊聊苏家屯考电工证的流程、含金量、备考技巧,以及未来职业发展的方… · 2026/11/14 14:59:20

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/13 22:30:50

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/14 13:23:47

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/14 13:20:59

有初级电工证怎么工作 2026河南最新政策怎么应对
有初级电工证怎么工作 2026河南最新政策怎么应对

有初级电工证怎么工作 2026河南最新政策怎么应对 之前考的证在外省能不能转过来?这个问题我每天被问上百次。2026年河南最新政策对证书跨省转移有了明确说明,特别是南阳市的从业者,需要特别关注。… · 2026/11/14 0:00:31

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略
电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 证书过期了不知道怎么复审延期?很多人遇到这种情况,要么是工作太忙没时间处理,要么是不知道具体流程,导致证书失效,影响工作和项目进展。其实复审并不难,关键是要找准官方报名入口,掌… · 2026/11/14 0:00:31

为什么要低压电工证实操考试考什么
为什么要低压电工证实操考试考什么

为什么低压电工证值不值得考?别再被中介骗了 你是不是也经常看到网上有人在问“低压电工证到底值不值得考”?或者在找报名点时,担心被中间人骗钱?这些问题,我懂,我也经历过。作为一名在应急管理行业摸爬滚打多年的从业者,我深知低压电工证不仅是一个从… · 2026/11/14 0:00:31

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码