gpt4 book ai didi

java - 在最小的 Big O 中找到不同对的乘积之和

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:19 25 4
gpt4 key购买 nike

我想在最小的 Big 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) 解决方案 here :

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));
}
}

关于java - 在最小的 Big O 中找到不同对的乘积之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55737928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com