Skip to content
Related Articles

Related Articles

Mean of array generated by products of all pairs of the given array

View Discussion
Improve Article
Save Article
Like Article
  • Last Updated : 07 May, 2021

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.67

Input: 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++




// 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




// 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




# 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#




// 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

Javascript




<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>

Output

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++




// 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




// 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




# 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#




// 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

Javascript




<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>

Output

11.67

Time Complexity: O(N)
Auxiliary Space: O(N)


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!