java - 子阵列最大乘积的 Kadenes 算法。帮我找出我的代码中的错误
问题描述
答案不是预期的。for 循环是否会产生错误。最大值没有更新。我认为它应该在每次迭代后更新,但似乎没有。数组有负值传染子数组
class Solution {
public int maxProduct(int[] nums) {
int gm=nums[0];
int max=nums[0];
int min=nums[0];
int lmax;
int lmin;
for(int i=1;i<nums.length;i++){
max=Math.max(nums[i],Math.max(nums[i]*max,nums[i]*min));
min=Math.min(nums[i],Math.min(nums[i]*min,nums[i]*max));
gm=Math.max(gm,Math.max(min,max));
}
return gm;
}
}
您的输入 [2,3,-2,4,-3] 输出 72 预期 144
解决方案
max=Math.max(nums[i],Math.max(nums[i]*max,nums[i]*min));
min=Math.min(nums[i],Math.min(nums[i]*min,nums[i]*max));
在计算时,min
您使用的是max
该迭代中的更新值。但是您应该使用先前迭代的值。
您可以计算最大值并存储在temp
计算后,min
您可以更新max
以解决此问题。
public int maxProduct(int[] nums) {
int gm = nums[0];
int max = nums[0];
int min = nums[0];
for (int i = 1; i < nums.length; i++) {
int temp = Math.max(nums[i], Math.max(nums[i] * max, nums[i] * min));
min = Math.min(nums[i], Math.min(nums[i] * min, nums[i] * max));
max = temp;
gm = Math.max(gm, Math.max(min, max));
}
return gm;
}
输出:144
推荐阅读
- r - 如何转换我的日期成为行条目而不是一列日期的数据框?
- java - Jackson 对象映射器没有从 java 对象创建正确的 Json 字符串
- node.js - 迭代数据并将其推送到数组后数组为空
- heroku - 如何在heroku上安装steamcmd?
- node.js - 在 Node.js Cloud Functions 中将 Firebase 时间戳设置为从今天起 2 周
- forms - 如何创建重定向到页面的搜索框?
- java - 如何解决此问题:失败 - 应用程序已存在于路径 /second
- machine-learning - 难以理解权重矩阵或 theta 矩阵的维度是 3X4 吗?
- python - 在python中创建一个矩阵,使得每个元素都是一个四元数
- ios - 发布模式下的 Flutter iOS 推送通知问题