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

java中的最大乘积子数组

如何解决java中的最大乘积子数组

这个问题是最大乘积子阵列我已经写了解决方案,但没有得到确切的答案。

package practicePrograms;

import java.util.*;

public class max_product_subarray {
    public static void main(String[] args) {
        int[] arr = {8,-2,8,-6,-8,-1};
        System.out.println(new Solun().maxProduct(arr,arr.length));
    }
}

class Solun {
    long maxProduct(int[] arr,int n) {
        long max = 1;
        long temp;
        List<Integer> at = new ArrayList<>();
        for (int i = 0; i < n; ) {
            temp = max;
            max = temp * arr[i];
            if (max == 0) {
                if (temp < 0) {
                    temp = temp * -1;
                }
                at.add((int) temp);
                max = 1;
            }
            i++;
        }
        Collections.sort(at);
        long maxi = at.get(at.size() - 1);
        return maxi;
    }
}

这里的 ArrayList 应该以排序的方式包含 [32,288] 但它只包含 [8,32] 为什么不包含 288

解决方法

@csalmhof 指出了您的解决方案的错误。但以下是可能对您有所帮助的可行解决方案。

long maxProduct(int[] arr,int n) {
    if (n == 1)
        return arr[0];
    long ans = 0;
    long maxPosCurr = 0;
    long maxNegCurr = 0;
    for (int elem : arr) {
        if (elem >= 0) {
            maxPosCurr = Math.max(maxPosCurr * elem,elem);
            maxNegCurr = Math.min(maxNegCurr * elem,elem);
        } else {
            long temp1 = Math.max(maxNegCurr * elem,elem);
            long temp2 = Math.min(maxPosCurr * elem,elem);
            maxPosCurr = temp1;
            maxNegCurr = temp2;
        }
        ans = Math.max(ans,maxPosCurr);
    }
    return ans;
}

如果您对工作有任何疑问,请告诉我。

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