给定大小为N的数组arr [] ,任务是找到可以从给定数组元素生成的有序对的所有乘积之和。
例子:
Input: arr[] ={1, 2, 3}
Output: 36
Explanation:All possible pairs are {(1, 1), {1, 2}, {1, 3}, {2, 1}, {2, 2}, {2, 3}, {3, 1}, {3, 2}, {3, 3}}. Therefore, the sum of product of all pairs is 36.
Input : arr[]={3, 4, 1, 2, 5}
Output: 225
天真的方法:最简单的方法是遍历给定数组中所有可能的对,以计算所有对乘积的乘积之和。
时间复杂度: O(N 2 )
辅助空间: O(1)
高效的方法:可以基于以下观察来优化上述方法:
arr[]={a1, a2, a3, a4 ….., an-1, an}
Now, sum of product of all possible pairs is =
{
(a1 * a1) + (a1 * a2) + (a1 * a3) + …..+ (a1 * an-1) + (a1, an) +
(a2 * a1) + (a2 * a2) + (a2 * a3) + ….. + (a2 * an-1) + (a2 * an) +
(a3 * a1) + (a3 * a2) + (a3 * a3) + ….. + (a3 * an-1) + (a3, an) +
…………………………………………………………………………..
(an, * a1) + (an * a2), +(an * a3) + ….. + (an * an-1) + (an, an)
}
={
(a1 + a2+ a3 + …..+ an-1 + an ) * (a1 + a2+ a3 + …..+ an-1 + an )
}
=(a1 + a2+ a3 + …..+ an-1 + an )2
请按照以下步骤解决问题:
- 初始化变量res = 0以存储数组元素的总和
- 遍历数组arr []并将数组的每个元素添加到res 。
- 最后,将res的平方打印为所需答案。
下面是上述方法的实现:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to calculate the
// sum of all pair-products
int sumOfProd(int arr[], int N)
{
// Stores sum of array
int sum = 0;
for (int i = 0; i < N; i++) {
// Update sum of the array
sum += arr[i];
}
return sum * sum;
}
// Driver Code
int main()
{
int arr[] = { 2, 3, 1, 5, 4 };
int N = sizeof(arr) / sizeof(arr[0]);
cout << sumOfProd(arr, N);
return 0;
}
Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
// Function to calculate the
// sum of all pair-products
static int sumOfProd(int arr[], int N)
{
// Stores sum of array
int sum = 0;
for(int i = 0; i < N; i++)
{
// Update sum of the array
sum += arr[i];
}
return sum * sum;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 2, 3, 1, 5, 4 };
int N = arr.length;
System.out.print(sumOfProd(arr, N));
}
}
// This code is contributed by offbeat
Python3
# Python3 program to implement
# the above approach
# Function to calculate the
# sum of all pair-products
def sumOfProd(arr, N):
# Stores sum of array
sum = 0
for i in range(N):
# Update sum of the array
sum += arr[i]
return sum * sum
# Driver Code
if __name__ == '__main__':
arr = [ 2, 3, 1, 5, 4 ]
N = len(arr)
print(sumOfProd(arr, N))
# This code is contributed by SURENDRA_GANGWAR
C#
// C# program to implement
// the above approach
using System;
class GFG{
// Function to calculate the
// sum of all pair-products
static int sumOfProd(int[] arr, int N)
{
// Stores sum of array
int sum = 0;
for(int i = 0; i < N; i++)
{
// Update sum of the array
sum += arr[i];
}
return sum * sum;
}
// Driver code
static void Main()
{
int[] arr = { 2, 3, 1, 5, 4 };
int N = arr.Length;
Console.WriteLine(sumOfProd(arr, N));
}
}
// This code is contributed by divyeshrabadiya07
输出:
225
时间复杂度: O(N)
辅助空间: O(1)