如何解决子阵列最大乘积的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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。