# Mean of range in array

• Difficulty Level : Easy
• Last Updated : 03 May, 2021

Given an array of n integers. You are given q queries. Write a program to print floor value of mean in range l to r for each query in a new line.

Examples :

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 experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

```Input : arr[] = {1, 2, 3, 4, 5}
q = 3
0 2
1 3
0 4
Output : 2
3
3
Here for 0 to 2 (1 + 2 + 3) / 3 = 2

Input : arr[] = {6, 7, 8, 10}
q = 2
0 3
1 2
Output : 7
7```

Naive Approach: We can run loop for each query l to r and find sum and number of elements in range. After this we can print floor of mean for each query.

## C++

 `// CPP program to find floor value``// of mean in range l to r``#include ``using` `namespace` `std;` `// To find mean of range in l to r``int` `findMean(``int` `arr[], ``int` `l, ``int` `r)``{``    ``// Both sum and count are``    ``// initialize to 0``    ``int` `sum = 0, count = 0;` `    ``// To calculate sum and number``    ``// of elements in range l to r``    ``for` `(``int` `i = l; i <= r; i++) {``        ``sum += arr[i];``        ``count++;``    ``}` `    ``// Calculate floor value of mean``    ``int` `mean = ``floor``(sum / count);` `    ``// Returns mean of array``    ``// in range l to r``    ``return` `mean;``}` `// Driver program to test findMean()``int` `main()``{``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``cout << findMean(arr, 0, 2) << endl;``    ``cout << findMean(arr, 1, 3) << endl;``    ``cout << findMean(arr, 0, 4) << endl;``    ``return` `0;``}`

## Java

 `// Java program to find floor value``// of mean in range l to r``public` `class` `Main {` `    ``// To find mean of range in l to r``    ``static` `int` `findMean(``int` `arr[], ``int` `l, ``int` `r)``    ``{``        ``// Both sum and count are``        ``// initialize to 0``        ``int` `sum = ``0``, count = ``0``;` `        ``// To calculate sum and number``        ``// of elements in range l to r``        ``for` `(``int` `i = l; i <= r; i++) {``            ``sum += arr[i];``            ``count++;``        ``}` `        ``// Calculate floor value of mean``        ``int` `mean = (``int``)Math.floor(sum / count);` `        ``// Returns mean of array``        ``// in range l to r``        ``return` `mean;``    ``}` `    ``// Driver program to test findMean()``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``2``, ``3``, ``4``, ``5` `};``        ``System.out.println(findMean(arr, ``0``, ``2``));``        ``System.out.println(findMean(arr, ``1``, ``3``));``        ``System.out.println(findMean(arr, ``0``, ``4``));``    ``}``}`

## Python3

 `# Python 3 program to find floor value``# of mean in range l to r``import` `math` `# To find mean of range in l to r``def` `findMean(arr, l, r):``    ` `    ``# Both sum and count are``    ``# initialize to 0``    ``sum``, count ``=` `0``, ``0``    ` `    ``# To calculate sum and number``    ``# of elements in range l to r``    ``for` `i ``in` `range``(l, r ``+` `1``):``        ``sum` `+``=` `arr[i]``        ``count ``+``=` `1` `    ``# Calculate floor value of mean``    ``mean ``=` `math.floor(``sum` `/` `count)` `    ``# Returns mean of array``    ``# in range l to r``    ``return` `mean` `# Driver Code``arr ``=` `[ ``1``, ``2``, ``3``, ``4``, ``5` `]``    ` `print``(findMean(arr, ``0``, ``2``))``print``(findMean(arr, ``1``, ``3``))``print``(findMean(arr, ``0``, ``4``))` `# This code is contributed``# by PrinciRaj1992`

## C#

 `//C# program to find floor value``// of mean in range l to r``using` `System;` `public` `class` `GFG {`` ` `    ``// To find mean of range in l to r``    ``static` `int` `findMean(``int` `[]arr, ``int` `l, ``int` `r)``    ``{``        ``// Both sum and count are``        ``// initialize to 0``        ``int` `sum = 0, count = 0;`` ` `        ``// To calculate sum and number``        ``// of elements in range l to r``        ``for` `(``int` `i = l; i <= r; i++) {``            ``sum += arr[i];``            ``count++;``        ``}`` ` `        ``// Calculate floor value of mean``        ``int` `mean = (``int``)Math.Floor((``double``)sum / count);`` ` `        ``// Returns mean of array``        ``// in range l to r``        ``return` `mean;``    ``}`` ` `    ``// Driver program to test findMean()``    ``public` `static` `void` `Main()``    ``{``        ``int` `[]arr = { 1, 2, 3, 4, 5 };``        ``Console.WriteLine(findMean(arr, 0, 2));``        ``Console.WriteLine(findMean(arr, 1, 3));``        ``Console.WriteLine(findMean(arr, 0, 4));``    ``}``}` `/*This code is contributed by PrinciRaj1992*/`

## PHP

 ``

## Javascript

 ``

Output :

```2
3
3```

Time Complexity: O(n)

Efficient Approach: We can find sum of numbers using numbers using prefix sum. The prefixSum[i] denotes the sum of first i elements. So sum of numbers in range l to r will be prefixSum[r] – prefixSum[l-1]. Number of elements in range l to r will be r – l + 1. So we can now print mean of range l to r in O(1).

## C++

 `// CPP program to find floor value``// of mean in range l to r``#include ``#define MAX 1000005``using` `namespace` `std;` `int` `prefixSum[MAX];` `// To calculate prefixSum of array``void` `calculatePrefixSum(``int` `arr[], ``int` `n)``{``    ``// Calculate prefix sum of array``    ``prefixSum[0] = arr[0];``    ``for` `(``int` `i = 1; i < n; i++)``        ``prefixSum[i] = prefixSum[i - 1] + arr[i];``}` `// To return floor of mean``// in range l to r``int` `findMean(``int` `l, ``int` `r)``{``    ``if` `(l == 0)``      ``return` `floor``(prefixSum[r]/(r+1));` `    ``// Sum of elements in range l to``    ``// r is prefixSum[r] - prefixSum[l-1]``    ``// Number of elements in range``    ``// l to r is r - l + 1``    ``return` `floor``((prefixSum[r] -``          ``prefixSum[l - 1]) / (r - l + 1));``}` `// Driver program to test above functions``int` `main()``{``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``calculatePrefixSum(arr, n);``    ``cout << findMean(0, 2) << endl;``    ``cout << findMean(1, 3) << endl;``    ``cout << findMean(0, 4) << endl;``    ``return` `0;``}`

## Java

 `// Java program to find floor value``// of mean in range l to r``public` `class` `Main {``public` `static` `final` `int` `MAX = ``1000005``;``    ``static` `int` `prefixSum[] = ``new` `int``[MAX];` `    ``// To calculate prefixSum of array``    ``static` `void` `calculatePrefixSum(``int` `arr[], ``int` `n)``    ``{``        ``// Calculate prefix sum of array``        ``prefixSum[``0``] = arr[``0``];``        ``for` `(``int` `i = ``1``; i < n; i++)``            ``prefixSum[i] = prefixSum[i - ``1``] + arr[i];``    ``}` `    ``// To return floor of mean``    ``// in range l to r``    ``static` `int` `findMean(``int` `l, ``int` `r)``    ``{``        ``if` `(l == ``0``)``           ``return` `(``int``)Math.floor(prefixSum[r] / (r + ``1``));``        ` `        ``// Sum of elements in range l to``        ``// r is prefixSum[r] - prefixSum[l-1]``        ``// Number of elements in range``        ``// l to r is r - l + 1``        ``return` `(``int``)Math.floor((prefixSum[r] -``                ``prefixSum[l - ``1``]) / (r - l + ``1``));``    ``}` `    ``// Driver program to test above functions``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``2``, ``3``, ``4``, ``5` `};``        ``int` `n = arr.length;``        ``calculatePrefixSum(arr, n);``        ``System.out.println(findMean(``1``, ``2``));``        ``System.out.println(findMean(``1``, ``3``));``        ``System.out.println(findMean(``1``, ``4``));``    ``}``}`

## Python3

 `# Python3 program to find floor value``# of mean in range l to r``import` `math as mt` `MAX` `=` `1000005``prefixSum ``=` `[``0` `for` `i ``in` `range``(``MAX``)]` `# To calculate prefixSum of array``def` `calculatePrefixSum(arr, n):` `    ``# Calculate prefix sum of array``    ``prefixSum[``0``] ``=` `arr[``0``]` `    ``for` `i ``in` `range``(``1``,n):``        ``prefixSum[i] ``=` `prefixSum[i ``-` `1``] ``+` `arr[i]` `# To return floor of mean``# in range l to r``def` `findMean(l, r):` `    ``if` `(l ``=``=` `0``):``        ``return` `mt.floor(prefixSum[r] ``/` `(r ``+` `1``))` `    ``# Sum of elements in range l to``    ``# r is prefixSum[r] - prefixSum[l-1]``    ``# Number of elements in range``    ``# l to r is r - l + 1``    ``return` `(mt.floor((prefixSum[r] ``-``                      ``prefixSum[l ``-` `1``]) ``/``                          ``(r ``-` `l ``+` `1``)))` `# Driver Code``arr ``=` `[``1``, ``2``, ``3``, ``4``, ``5``]` `n ``=` `len``(arr)` `calculatePrefixSum(arr, n)``print``(findMean(``0``, ``2``))``print``(findMean(``1``, ``3``))``print``(findMean(``0``, ``4``))` `# This code is contributed by Mohit Kumar`

## C#

 `// C# program to find floor value``// of mean in range l to r``using` `System;``                    ` `public` `class` `GFG {``public` `static` `readonly` `int` `MAX = 1000005;``    ``static` `int` `[]prefixSum = ``new` `int``[MAX];`` ` `    ``// To calculate prefixSum of array``    ``static` `void` `calculatePrefixSum(``int` `[]arr, ``int` `n)``    ``{``        ``// Calculate prefix sum of array``        ``prefixSum[0] = arr[0];``        ``for` `(``int` `i = 1; i < n; i++)``            ``prefixSum[i] = prefixSum[i - 1] + arr[i];``    ``}`` ` `    ``// To return floor of mean``    ``// in range l to r``    ``static` `int` `findMean(``int` `l, ``int` `r)``    ``{``        ``if` `(l == 0)``           ``return` `(``int``)Math.Floor((``double``)(prefixSum[r] / (r + 1)));``         ` `        ``// Sum of elements in range l to``        ``// r is prefixSum[r] - prefixSum[l-1]``        ``// Number of elements in range``        ``// l to r is r - l + 1``        ``return` `(``int``)Math.Floor((``double``)(prefixSum[r] -``                ``prefixSum[l - 1]) / (r - l + 1));``    ``}`` ` `    ``// Driver program to test above functions``    ``public` `static` `void` `Main()``    ``{``        ``int` `[]arr = { 1, 2, 3, 4, 5 };``        ``int` `n = arr.Length;``        ``calculatePrefixSum(arr, n);``        ``Console.WriteLine(findMean(1, 2));``        ``Console.WriteLine(findMean(1, 3));``        ``Console.WriteLine(findMean(1, 4));``    ``}``}` `//This code is contributed by PrinciRaj1992`

## Javascript

 ``

Output:

```2
3
3```

This article is contributed by nuclode. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.