Skip to content
Related Articles

Related Articles

Improve Article
Find mean of subarray means in a given array
  • Difficulty Level : Easy
  • Last Updated : 29 Apr, 2021

You are given an array of n-elements you have to find the mean of the array as mean of all consecutive m-elements of array for all possible m-length array with consecutive elements. 
Examples: 
 

Input :arr[] = {3, 5, 1, 8, 9, 4}, 
           m = 4 
Output : Mean = 5.16667
Explanation : {3, 5, 1, 8}, {5, 1, 8, 9}, 
{1, 8, 9, 4} are three set of m-consecu-
tive elements. Mean of mean of sets 
is (17/4 + 23/4 + 22/4 )/ 3

Input : arr[] = {9, 4}, m = 1
Output : Mean = 6.5
Explanation : {9}, {4} are two set of
1-consecutive element. Mean of means 
of sets is (9 + 4 )/ 2

 

A simple solution is to consider all subarrays of size m, compute their means. Finally return mean of means.
An efficient solution is use the Sliding Window Algorithm for this problem where we find sum of m-length window and then add up mean of each window to a value sum. At last we will have our result by dividing total sum by number of window possible and that too is sum /(n-m+1).
 

C++




// CPP program to find mean of means
#include <bits/stdc++.h>
using namespace std;
 
// function to find mean vale
float findMean(int arr[], int n, int m)
{
    // declare sum and winSum (window sum)
    float sum = 0, winSum = 0;
    int i = 0;
 
    // find sum for 1st m-length window
    for (; i < m; i++)
        winSum += arr[i];
    sum += (winSum / m);
 
    // iterate over array to find sum
    // of all m-length means
    for (; i < n; i++) {
        winSum = winSum - arr[i - m] + arr[i];
        sum += (winSum / m);
    }
 
    // mean of means will be sum of means
    // divided by no of such means
    return (sum / (n - m + 1));
}
 
// Driver code
int main()
{
    int arr[] = { 2, 5, 7, 1, 9, 3, 9 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int m = 4;
    cout << "Mean = " << findMean(arr, n, m);
    return 0;
}

Java




// Java program to find mean of means
import java.util.*;
import java.lang.*;
 
public class GeeksforGeeks{
     
    // function to find mean value
    public static float findMean(int arr[], int n,
                                          int m){
     
        // declare sum and winSum (window sum)
        float sum = 0, winSum = 0;
        int i = 0;
 
        // find sum for 1st m-length window
        for (; i < m; i++)
            winSum += arr[i];
        sum += (winSum / m);
 
        // iterate over array to find sum
        // of all m-length means
        for (; i < n; i++) {
            winSum = winSum - arr[i - m] + arr[i];
            sum += (winSum / m);
        }
 
        // mean of means will be sum of means
        // divided by no of such means
        return (sum / (n - m + 1));
    }
     
    // driver code
    public static void main(String argc[]){
    int arr[] = { 2, 5, 7, 1, 9, 3, 9 };
    int n = 7;
    int m = 4;
    System.out.println("Mean = " +
                      findMean(arr, n, m));
    }
}
 
/*This code is contributed by Sagar Shukla.*/

Python3




# Python3 program to find mean of means
 
# function to find mean vale
def findMean(arr, n, m) :
     
    # declare sum and winSum (window sum)
    sum = float(0)
    winSum = float(0)
    i = 0
 
    # find sum for 1st m-length window
    while (i < m):
        winSum = winSum + arr[i]
        i = i + 1
    sum = sum + (winSum / m);
 
    # iterate over array to find sum
    # of all m-length means
    while (i < n):
        winSum = winSum - arr[i - m] + arr[i]
        sum = sum + (winSum / m)
        i = i + 1
 
    # mean of means will be sum of means
    # divided by no of such means
    return (sum / (n - m + 1));
 
# Driven code
arr = [ 2, 5, 7, 1, 9, 3, 9 ]
n = len(arr)
m = 4
print ("Mean = ", findMean(arr, n, m))
 
# This code is contributed by "rishabh_jain".

C#




// Java program to find mean of means
using System;
 
public class GeeksforGeeks{
     
    // function to find mean value
    public static float findMean(int []arr, int n,
                                            int m)
    {
     
        // declare sum and winSum (window sum)
        float sum = 0, winSum = 0;
        int i = 0;
 
        // find sum for 1st m-length window
        for (; i < m; i++)
            winSum += arr[i];
             
        sum += (winSum / m);
 
        // iterate over array to find sum
        // of all m-length means
        for (; i < n; i++) {
            winSum = winSum - arr[i - m] + arr[i];
             
            sum += (winSum / m);
        }
 
        // mean of means will be sum of means
        // divided by no of such means
        return (sum / (n - m + 1));
    }
     
    // driver code
    public static void Main(){
    int []arr = { 2, 5, 7, 1, 9, 3, 9 };
    int n = 7;
    int m = 4;
     
    Console.WriteLine("Mean = " +
                    findMean(arr, n, m));
    }
}
 
/* This code is contributed by vt_m.*/

PHP




<?php
// PHP program to find mean of means
 
// function to find mean vale
function findMean($arr, $n, $m)
{
     
    // declare sum and
    // winSum (window sum)
    $sum = 0;
    $winSum = 0;
    $i = 0;
 
    // find sum for 1st
    // m-length window
    for (; $i < $m; $i++)
        $winSum += $arr[ $i];
    $sum += ( $winSum / $m);
 
    // iterate over array to find sum
    // of all m-length means
    for (; $i < $n; $i++)
    {
        $winSum = $winSum - $arr[ $i - $m] +
                                 $arr[ $i];
        $sum += ( $winSum / $m);
    }
 
    // mean of means will be sum of means
    // divided by no of such means
    return ($sum / ($n - $m + 1));
}
 
    // Driver code
    $arr = array(2, 5, 7, 1, 9, 3, 9);
    $n =count($arr);
    $m = 4;
    echo "Mean = ", findMean($arr, $n, $m);
 
// This code is contributed by anuj_67
?>

Javascript




<script>
 
// Javascript program to find mean of means
 
// function to find mean vale
function findMean(arr, n, m)
{
    // declare sum and winSum (window sum)
    var sum = 0, winSum = 0;
    var i = 0;
 
    // find sum for 1st m-length window
    for (; i < m; i++)
        winSum += arr[i];
    sum += (winSum / m);
 
    // iterate over array to find sum
    // of all m-length means
    for (; i < n; i++) {
        winSum = winSum - arr[i - m] + arr[i];
        sum += (winSum / m);
    }
 
    // mean of means will be sum of means
    // divided by no of such means
    return (sum / (n - m + 1));
}
 
// Driver code
var arr = [ 2, 5, 7, 1, 9, 3, 9 ];
var n = arr.length;
var m = 4;
document.write( "Mean = " + findMean(arr, n, m));
 
</script>

Output: 
 

Mean = 4.9375

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live 




My Personal Notes arrow_drop_up
Recommended Articles
Page :