Find mean of subarray means in a given array

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
Naive approach: A simple solution is to consider all subarrays of size m, compute their means. Finally, return mean of means.
An efficient solution is to 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 valuefloat 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 codeint 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 meansimport java.util.*;import java.lang.*;public class zambiatek{ // 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 valuedef 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 codearr = [ 2, 5, 7, 1, 9, 3, 9 ]n = len(arr)m = 4print ("Mean = ", findMean(arr, n, m))# This code is contributed by "rishabh_jain". |
C#
// Java program to find mean of meansusing System;public class zambiatek{ // 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 valuefunction 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 valuefunction 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 codevar 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
Time Complexity: O(N)
Auxiliary Space: O(1)
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



