我想求最小大O中不同对的乘积之和。
列表=[3,2,1,7,9]
所以不同的对是—(3,2),(3,1)(3,7),(3,9),(2,1),(2,7),(2,9),(1,7),(1,9),(7,9)。
注意-(2,3)与(3,2)相同。
我在做什么:

   List = [3 , 2, 1 , 7, 9]

   int result = 0;

    for (int inner = 0; inner < list.size()-1; inner ++){

        for(int outer = inner+1; outer < list.size(); outer++){

            result+= list[inner] * list[outer];
        }
    }

它将在o(n^2)中运行。
我想知道是否有比o(n^2)运行时间更短的更好的解决方案。
谢谢。
编辑-非重复对之和->非重复对之积之和

最佳答案

你有有效的O(N)解决方案:

static int findProductSum(int A[], int n)
{
    // calculating array sum (a1 + a2 ... + an)
    int array_sum = 0;
    for (int i = 0; i < n; i++)
        array_sum = array_sum + A[i];

    // calcualting square of array sum
    // (a1 + a2 + ... + an)^2
    int array_sum_square = array_sum * array_sum;

    // calcualting a1^2 + a2^2 + ... + an^2
    int individual_square_sum = 0;
    for (int i = 0; i < n; i++)
        individual_square_sum += A[i] * A[i];

    // required sum is (array_sum_square -
    // individual_square_sum) / 2
    return (array_sum_square - individual_square_sum) / 2;
}

// Driver code
public static void main(String[] args)
{
    int A[] = {1, 3, 4};
    int n = A.length;
    System.out.println("sum of product of all pairs of array "
            +"elements : " + findProductSum(A, n));
    }
}

10-05 18:25