
Maximum Product Subarray
初始化两个变量 遍历数组,从第二个元素开始: 每次更新后,比较当前最大值 返回
发布日期:2025-04-13 09:30:18
浏览次数:15
分类:精选文章
本文共 1361 字,大约阅读时间需要 4 分钟。
为了找到数组中最大的子数组乘积,我们可以使用两个变量来跟踪当前的最大正乘积和最大负乘积。遍历数组时,根据当前元素的正负,更新这两个变量,并每次更新结果。
步骤如下:
pos
和 neg
,分别表示当前的最大正乘积和最大负乘积。初始时,pos
为数组的第一个元素的正值或0,neg
为数组的第一个元素的负值或0。- 如果当前元素为0,重置
pos
和neg
为0。 - 如果当前元素为正数,更新
pos
为当前元素或pos
乘以当前元素的最大值,neg
为neg
乘以当前元素。 - 如果当前元素为负数,更新
pos
为neg
乘以当前元素,neg
为当前元素或pos
乘以当前元素的最小值。
result
与 pos
和 neg
的最大值,更新 result
。result
。代码示例:
public class Solution { public int maxProduct(int[] A) { if (A == null || A.length == 0) { return 0; } int result = A[0]; int pos = A[0] > 0 ? A[0] : 0; int neg = A[0] < 0 ? -A[0] : 0; for (int i = 1; i < A.length; i++) { if (A[i] == 0) { pos = 0; neg = 0; } else if (A[i] > 0) { pos = Math.max(A[i], pos * A[i]); neg = neg * A[i]; } else { int old_pos = pos; pos = neg * A[i]; neg = Math.min(A[i], old_pos * A[i]); } result = Math.max(result, Math.max(pos, neg)); } return result; }}
详细解释:
- 初始化:
pos
和neg
初始化为数组的第一个元素的正负值或0。 - 遍历数组:对于每个元素,根据其正负,更新
pos
和neg
:- 正数:更新
pos
为当前元素或pos
乘以当前元素的最大值,neg
为neg
乘以当前元素。 - 负数:更新
pos
为neg
乘以当前元素,neg
为当前元素或pos
乘以当前元素的最小值。
- 正数:更新
- 更新结果:每次遍历后,更新
result
为当前pos
和neg
中的最大值。
这种方法确保了在每一步都能跟踪到可能的最大乘积,时间复杂度为 O(n),适用于较大的数组。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年05月22日 20时12分19秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Mac mini7.1 2014年末 安装单windows 10系统
2025-04-11
Mac mini7.1 2014年末系统损坏开机跳出闪动带问候文件夹
2025-04-11
mac node版本管理
2025-04-11
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
2025-04-11
Mac OS X 上 Python 的框架和非框架构建之间的差异
2025-04-11
Mac OS X 中的 virtualenv 问题
2025-04-11
Mac OS X下Sublime Text (V2.0.1)破解
2025-04-11
Mac OS X汇编语言常识
2025-04-11
Mac os 如何安装SVN
2025-04-11
Mac OS下错误The superclass “javax.servlet.http.HttpServlet“ was not found on the Java Build Path的解决方法
2025-04-11
Mac os如何安装绿盾客户端
2025-04-11
mac xmind 激活
2025-04-11
mac 下 android studio 的离线gradle极速配置方法
2025-04-11
Mac 下 Python+Selenium 自动上传西瓜视频
2025-04-11
mac 下 react Native ios环境搭建
2025-04-11
Mac 下使用sourcetree操作git教程
2025-04-11
mac 下如何建立vue-cli项目
2025-04-11