我试图计算数组中3个整数的最大可能乘积和目前,我的算法通过使用几个if语句来解决这个问题数组被排序,我已经计算出数组中负整数的数目。
有没有更简单的方法来解决这个问题?

if (nbr_of_negative < 2) {
        // If the number of negatives are lower than 2, the 3 highest positive numbers generate the highest product.
        return array_of_ints[array_of_ints.length-1] * array_of_ints[array_of_ints.length-2] * array_of_ints[array_of_ints.length-3];
    } else {
        // If the number of negatives are 2 or higher, you take the highest number together with the
        // product of the two lowest or the product of the second and third highest number.
        int product_of_two_negative = (array_of_ints[0] * -1) * (array_of_ints[1] * -1);
        int product_of_two_positive = array_of_ints[array_of_ints.length-2] * array_of_ints[array_of_ints.length-3];
        int highest_value = array_of_ints[array_of_ints.length-1];

        if (product_of_two_negative > product_of_two_positive) {
            return product_of_two_negative * highest_value;
        } else {
            return product_of_two_positive * highest_value;
        }
    }

最佳答案

我的解决方案是检查最高值是否为正值。如果是这样,我将最大值乘以数组中的第二个最大乘积否则我将把最大值乘以最小的乘积(得到最大的负数)为了找到最大或最小的值,我使用Math.maxMath.min

    Arrays.sort(helpArray);
    int product = 0;
    if(helpArray[helpArray.length-1]>0) //array is sorted in ascending order
         product = helpArray[helpArray.length-1] * Math.max(helpArray[0]*helpArray[1], helpArray[helpArray.length-2] * helpArray[helpArray.length-3]);
    else
        product = helpArray[helpArray.length-1] * Math.min(helpArray[0]*helpArray[1], helpArray[helpArray.length-2] * helpArray[helpArray.length-3]);

关于java - 找到3个整数的最高乘积的最简单实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38471210/

10-15 11:47