Given an array arr[] consisting of N integers, the task is to find the mean of the array formed by the products of unordered pairs of the given array.
Examples:
Input: arr[] = {2, 5, 7}
Output: 19.67
Explanation:
Product of unordered pairs of array arr[] are 2 * 5 = 10, 2 * 7 = 14 and 5 * 7 = 35.
Therefore, the resultant array of product of pairs is {10, 14, 35}.
Mean of the array of product of pairs is 59/3 = 19.67Input: arr[] = {1, 2, 4, 8}
Output: 11.67
Explanation:
Product of unordered pairs of array arr[] are 1 * 2 = 2, 1 * 4 = 4, 1 * 8 = 8, 2 * 4 = 8, 2 * 8 = 16, 4 * 8 = 32.
Therefore, the resultant array of product of pairs is {2, 4, 8, 8, 16, 32}.
Mean of the array of product of pairs is 70/6 i.e., 11.67
Naive Approach: The simplest approach to solve the problem is to generate all possible pairs of array pairProductArray[] i.e., array formed by the product of unordered pairs of the array arr[]. Then, find the mean of the pairProductArray[]. Follow the steps below to solve the problem:
- Generate all possible pairs of the array arr[] and store their products in pairProductArray[].
- Initialize a variable sum to store the sum of the elements of pairProductArray[].
- Divide the variable sum with the size of pairProductArray[] to get the required mean.
- Finally, print the value of the sum as the resultant mean.
Below is the implementation of the above approach:
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to find the mean of pair // product array of arr[] float pairProductMean( int arr[], int N)
{ // Store product of pairs
vector< int > pairArray;
// Generate all unordered pairs
for ( int i = 0; i < N; i++) {
for ( int j = i + 1; j < N; j++) {
int pairProduct
= arr[i] * arr[j];
// Store product of pairs
pairArray.push_back(pairProduct);
}
}
// Size of pairArray
int length = pairArray.size();
// Store sum of pairArray
float sum = 0;
for ( int i = 0; i < length; i++)
sum += pairArray[i];
// Stores the mean of pairArray[]
float mean;
// Find mean of pairArray[]
if (length != 0)
mean = sum / length;
else
mean = 0;
// Return the resultant mean
return mean;
} // Driver Code int main()
{ // Given array arr[]
int arr[] = { 1, 2, 4, 8 };
int N = sizeof (arr) / sizeof (arr[0]);
// Function Call
cout << fixed << setprecision(2)
<< pairProductMean(arr, N);
return 0;
} |
// Java program for the // above approach import java.util.*;
class GFG{
// Function to find the mean // of pair product array of arr[] static double pairProductMean( int arr[],
int N)
{ // Store product of pairs
Vector<Integer> pairArray =
new Vector<>();
// Generate all unordered pairs
for ( int i = 0 ; i < N; i++)
{
for ( int j = i + 1 ; j < N; j++)
{
int pairProduct = arr[i] *
arr[j];
// Store product of pairs
pairArray.add(pairProduct);
}
}
// Size of pairArray
int length = pairArray.size();
// Store sum of pairArray
float sum = 0 ;
for ( int i = 0 ; i < length; i++)
sum += pairArray.get(i);
// Stores the mean of
// pairArray[]
float mean;
// Find mean of pairArray[]
if (length != 0 )
mean = sum / length;
else
mean = 0 ;
// Return the resultant mean
return mean;
} // Driver Code public static void main(String[] args)
{ // Given array arr[]
int arr[] = { 1 , 2 , 4 , 8 };
int N = arr.length;
// Function Call
System.out.format( "%.2f" ,
pairProductMean(arr, N));
} } // This code is contributed by shikhasingrajput |
# Python3 program for the # above approach # Function to find the mean # of pair product array of arr def pairProductMean(arr, N):
# Store product of pairs
pairArray = [];
# Generate all unordered
# pairs
for i in range (N):
for j in range (i + 1 , N):
pairProduct = arr[i] * arr[j];
# Store product of pairs
pairArray.append(pairProduct);
# Size of pairArray
length = len (pairArray);
# Store sum of pairArray
sum = 0 ;
for i in range (length):
sum + = pairArray[i];
# Stores the mean of
# pairArray
mean = 0 ;
# Find mean of pairArray
if (length ! = 0 ):
mean = sum / length;
else :
mean = 0 ;
# Return the resultant
# mean
return mean;
# Driver Code if __name__ = = '__main__' :
# Given array arr
arr = [ 1 , 2 , 4 , 8 ];
N = len (arr);
# Function Call
print ( "{0:.2f}" . format (
pairProductMean(arr, N)))
# This code is contributed by Rajput-Ji |
// C# program for the // above approach using System;
using System.Collections.Generic;
class GFG{
// Function to find the mean // of pair product array of []arr static double pairProductMean( int []arr,
int N)
{ // Store product of pairs
List< int > pairArray =
new List< int >();
// Generate all unordered pairs
for ( int i = 0; i < N; i++)
{
for ( int j = i + 1; j < N; j++)
{
int pairProduct = arr[i] *
arr[j];
// Store product of pairs
pairArray.Add(pairProduct);
}
}
// Size of pairArray
int length = pairArray.Count;
// Store sum of pairArray
float sum = 0;
for ( int i = 0; i < length; i++)
sum += pairArray[i];
// Stores the mean of
// pairArray[]
float mean;
// Find mean of pairArray[]
if (length != 0)
mean = sum / length;
else
mean = 0;
// Return the resultant mean
return mean;
} // Driver Code public static void Main(String[] args)
{ // Given array []arr
int []arr = {1, 2, 4, 8};
int N = arr.Length;
// Function Call
Console.WriteLine( "{0:F2}" ,
pairProductMean(arr,
N));
} } // This code is contributed by 29AjayKumar |
<script> // Javascript program for the // above approach // Function to find the mean
// of pair product array of arr
function pairProductMean(arr , N)
{
// Store product of pairs
var pairArray = [];
// Generate all unordered pairs
for (i = 0; i < N; i++) {
for (j = i + 1; j < N; j++) {
var pairProduct = arr[i] * arr[j];
// Store product of pairs
pairArray.push(pairProduct);
}
}
// Size of pairArray
var length = pairArray.length;
// Store sum of pairArray
var sum = 0;
for (i = 0; i < length; i++)
sum += pairArray[i];
// Stores the mean of
// pairArray
var mean;
// Find mean of pairArray
if (length != 0)
mean = sum / length;
else
mean = 0;
// Return the resultant mean
return mean;
}
// Driver Code
// Given array arr
var arr = [ 1, 2, 4, 8 ];
var N = arr.length;
// Function Call
document.write(pairProductMean(arr, N).toFixed(2));
// This code contributed by gauravrajput1 </script> |
11.67
Time Complexity: O(N2)
Auxiliary Space: O(N2)
Efficient Approach: The idea is to use the fact that every element arr[i] is multiplied with every element arr[j] which is on the right side of the element arr[i], more formally element at index i is multiplied to all the elements positioned at index j such that j > i. Follow the steps below to solve the problem:
- Create a suffix sum array suffixSumArray[] for the given array arr[].
- Initialize variable res to store the sum of product pairs of array arr[].
- Iterate array arr[] and for each position i incrementing res with arr[i]*suffixSumArray[i+1].
- Divide the variable res with N*(N – 1)/ 2 which is the number of possible products.
- Finally, print the value of res as the resultant mean.
Below is the implementation of the above approach:
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to find the mean of pair // product array of arr[] float pairProductMean( int arr[], int N)
{ // Initializing suffix sum array
int suffixSumArray[N];
suffixSumArray[N - 1] = arr[N - 1];
// Build suffix sum array
for ( int i = N - 2; i >= 0; i--) {
suffixSumArray[i]
= suffixSumArray[i + 1]
+ arr[i];
}
// Size of pairProductArray
int length = (N * (N - 1)) / 2;
// Stores sum of pairProductArray
float res = 0;
for ( int i = 0; i < N - 1; i++) {
res += arr[i]
* suffixSumArray[i + 1];
}
// Store the mean
float mean;
// Find mean of pairProductArray
if (length != 0)
mean = res / length;
else
mean = 0;
// Return the resultant mean
return mean;
} // Driver Code int main()
{ // Given array arr[]
int arr[] = { 1, 2, 4, 8 };
int N = sizeof (arr) / sizeof (arr[0]);
// Function Call
cout << fixed << setprecision(2)
<< pairProductMean(arr, N);
return 0;
} |
// Java program for the above approach import java.io.*;
import java.util.*;
class GFG{
// Function to find the mean of pair // product array of arr[] static float pairProductMean( int arr[], int N)
{ // Initializing suffix sum array
int suffixSumArray[] = new int [N];
suffixSumArray[N - 1 ] = arr[N - 1 ];
// Build suffix sum array
for ( int i = N - 2 ; i >= 0 ; i--)
{
suffixSumArray[i] = suffixSumArray[i + 1 ] +
arr[i];
}
// Size of pairProductArray
int length = (N * (N - 1 )) / 2 ;
// Stores sum of pairProductArray
float res = 0 ;
for ( int i = 0 ; i < N - 1 ; i++)
{
res += arr[i] *
suffixSumArray[i + 1 ];
}
// Store the mean
float mean;
// Find mean of pairProductArray
if (length != 0 )
mean = res / length;
else
mean = 0 ;
// Return the resultant mean
return mean;
} // Driver Code public static void main (String[] args)
{ // Given array arr[]
int arr[] = { 1 , 2 , 4 , 8 };
int N = arr.length;
// Function call
System.out.format( "%.2f" ,
pairProductMean(arr, N));
} } // This code is contributed by sanjoy_62 |
# Python3 program for the above approach # Function to find the mean of pair # product array of arr[] def pairProductMean(arr, N):
# Initializing suffix sum array
suffixSumArray = [ 0 ] * N
suffixSumArray[N - 1 ] = arr[N - 1 ]
# Build suffix sum array
for i in range (N - 2 , - 1 , - 1 ):
suffixSumArray[i] = suffixSumArray[i + 1 ] + arr[i]
# Size of pairProductArray
length = (N * (N - 1 )) / / 2
# Stores sum of pairProductArray
res = 0
for i in range (N - 1 ):
res + = arr[i] * suffixSumArray[i + 1 ]
# Store the mean
mean = 0
# Find mean of pairProductArray
if (length ! = 0 ):
mean = res / length
else :
mean = 0
# Return the resultant mean
return mean
# Driver Code if __name__ = = '__main__' :
# Given array arr[]
arr = [ 1 , 2 , 4 , 8 ]
N = len (arr)
# Function Call
print ( round (pairProductMean(arr, N), 2 ))
# This code is contributed by mohit kumar 29 |
// C# program for the above approach using System;
class GFG{
// Function to find the mean of pair // product array of arr[] static double pairProductMean( int [] arr, int N)
{ // Initializing suffix sum array
int [] suffixSumArray = new int [N];
suffixSumArray[N - 1] = arr[N - 1];
// Build suffix sum array
for ( int i = N - 2; i >= 0; i--)
{
suffixSumArray[i] = suffixSumArray[i + 1] +
arr[i];
}
// Size of pairProductArray
int length = (N * (N - 1)) / 2;
// Stores sum of pairProductArray
double res = 0;
for ( int i = 0; i < N - 1; i++)
{
res += arr[i] *
suffixSumArray[i + 1];
}
// Store the mean
double mean;
// Find mean of pairProductArray
if (length != 0)
mean = res / length;
else
mean = 0;
// Return the resultant mean
return mean;
} // Driver code public static void Main()
{ // Given array arr[]
int [] arr = { 1, 2, 4, 8 };
int N = arr.Length;
// Function call
Console.WriteLine( string .Format( "{0:0.00}" ,
pairProductMean(arr, N)));
} } // This code is contributed by code_hunt |
<script> // Javascript program for the above approach // Function to find the mean of pair // product array of arr[] function pairProductMean(arr, N)
{ // Initializing suffix sum array
var suffixSumArray = Array(N);
suffixSumArray[N - 1] = arr[N - 1];
// Build suffix sum array
for ( var i = N - 2; i >= 0; i--) {
suffixSumArray[i]
= suffixSumArray[i + 1]
+ arr[i];
}
// Size of pairProductArray
var length = (N * (N - 1)) / 2;
// Stores sum of pairProductArray
var res = 0;
for ( var i = 0; i < N - 1; i++) {
res += arr[i]
* suffixSumArray[i + 1];
}
// Store the mean
var mean;
// Find mean of pairProductArray
if (length != 0)
mean = res / length;
else
mean = 0;
// Return the resultant mean
return mean;
} // Driver Code // Given array arr[] var arr = [ 1, 2, 4, 8 ];
var N = arr.length;
// Function Call document.write( pairProductMean(arr, N).toFixed(2)); </script> |
11.67
Complexity analysis:
The time complexity of the given program is O(N), where N is the size of the input array. This is because the program iterates over the input array twice, once to build the suffix sum array, and once to calculate the sum of the pair product array.
The space complexity of the program is O(N), as it creates an array of size N to store the suffix sum array.