数组中元素的乘法

时间:2016-10-29 17:13:12

标签: arrays multiplying

我正在努力解决问题。我们将在O(n)中找到数组的maxProduct,因此不允许使用双循环,因为它将是O(n²) 您将在我的代码中看到,除了第一个和最后一个元素之外,所有元素都是多重的。如何使用代码逻辑将数组的第一个和最后一个元素相乘?

这是我的代码:

public class Maxprod {
public static void main(String [] args){
    Maxprod myclass = new Maxprod();
    myclass.maxProduct();
}

public void maxProduct(){
    int [] myarr = {4, -5, -7, 5};
    int max = 0, p=0;
    int q = 0;

    for(int i=0; i <myarr.length-1; i++){
        p = myarr[i]*myarr[i+1]; // 4 * 5 is missing here
        if (p > max){
            max = p;
        }
    }
    System.out.println(max);
}

}

1 个答案:

答案 0 :(得分:0)

您的代码情况似乎比您想象的要糟糕;从我看到你不仅错过(4 * 5),而且(4 * -7)和(-5 * -5)。你确定你只需要连续的号码吗?你也错过了(-7 * 5),因为你的for循环条件是一个。

要回答您最直接的问题,请将p初始化为(start * end):

p = myarr[0] * myarr[myarr.length-1];
for(int i=0; i <myarr.length; i++){
    p = myarr[i]*myarr[i+1]; // 4 * 5 is missing here
    if (p > max){
        max = p;
    }
}
System.out.println(max);

如果您真的想要maxProduct,考虑所有排列,在O(n)中,您需要跟踪两个最大正数和两个最大负数。考虑这样的事情:

public void maxProduct(){
    int [] myarr = {4, -5, -7, 5};
    int max = 0, maxn = 0, maxp = 0;
    int n1 = 0, n2 = 0;
    int p1 = 0, p2 = 0;

    for(int i=0; i <myarr.length; i++){
        // Store greatest negative pair
        if (myarr[i] < n1) {
            n2 = n1;
            n1 = myarr[i];
        }

        // Store greatest positive pair
        if (myarr[i] > p1) {
            p2 = p1;
            p1 = myarr[i];
        }
    }

    maxn = n1 * n2;
    maxp = p1 * p2;
    if (maxn > maxp) {
        max = maxn;
    } else {
        max = maxp;
    }

    System.out.println(max);
}