【发布时间】:2020-09-18 19:43:51
【问题描述】:
最大乘积子数组 给定一个包含正整数和负整数的数组,找到最大积的子数组。 例子:
输入:arr[] = {6, -3, -10, 0, 2} 输出:子数组是 {6, -3, -10}
输入:arr[] = {-1, -3, -10, 0, 60} 输出:子数组是 {60}
输入:arr[] = {-2, -3, 0, -2, -40} 输出:子数组是 {-2, -40}
注意:查找最大乘积是使用 kadane 算法完成的,我尝试重用它来查找子数组,但无法破坏查找起始索引的部分,查找结束索引很容易。结束索引是 res
public int maxProductSubArray(int arr[], int len) {
int res = arr[0];
int max = arr[0];
int min = arr[0];
for (int i = 1; i < len; i++) {
int temp = max;
max = Math.max(Math.max(max * arr[i], min * arr[i]), arr[i]);
min = Math.min(Math.min(temp * arr[i], min * arr[i]), arr[i]);
res = Math.max(res, max);
}
return res;
}
但无法解决问题以找到子数组。
【问题讨论】:
-
欢迎来到 Stackoverflow,请阅读How To Ask。特别关注How To Create MCVE。确保使用适当的标签(编程语言、相关技术等)标记您的问题。您在发布一个好问题上付出的努力越多:一个易于阅读、理解并且是 on topic 的问题 - 它吸引相关人员的机会就越高,您将更快地获得帮助。祝你好运!
-
你能建议我发布的内容有什么问题以及我错过了什么吗?标签和问题陈述很清楚。是的,我在发布这个问题之前搜索了堆栈和谷歌。
-
现在我明白了。已经编辑并放置了我尝试过的东西以及我被卡住的地方
-
只是建议。
-
请查看上面链接中提供的解决方案。您只需进行一些小的更改即可实现您的目标。
标签: java arrays data-structures