微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

子阵列最大乘积的Kadenes算法帮我找到代码中的错误

如何解决子阵列最大乘积的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 举报,一经查实,本站将立刻删除。