Open In App

Mean of range in array

Last Updated : 09 Dec, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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 : 

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

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 <bits/stdc++.h>
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;
}


C




// C program to find floor value
// of mean in range l to r
#include <stdio.h>
#include <math.h>
 
// 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 };
    printf("%d\n",findMean(arr, 0, 2));
    printf("%d\n",findMean(arr, 1, 3));
    printf("%d\n",findMean(arr, 0, 4));
    return 0;
}
 
// This code is contributed by kothavvsaakash


Java




// Java program to find floor value
// of mean in range l to r
import java.io.*;
 
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#




<div id="highlighter_465727" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">//C# program to find floor value</code></div><div class="line number2 index1 alt1"><code class="comments">// of mean in range l to r</code></div><div class="line number3 index2 alt2"><code class="keyword">using</code> <code class="plain">System;</code></div><div class="line number4 index3 alt1"> </div><div class="line number5 index4 alt2"><code class="keyword">public</code> <code class="keyword">class</code> <code class="plain">GFG {</code></div><div class="line number6 index5 alt1"><code class="undefined spaces"> </code> </div><div class="line number7 index6 alt2"><code class="undefined spaces">    </code><code class="comments">// To find mean of range in l to r</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">    </code><code class="keyword">static</code> <code class="keyword">int</code> <code class="plain">findMean(</code><code class="keyword">int</code> <code class="plain">[]arr, </code><code class="keyword">int</code> <code class="plain">l, </code><code class="keyword">int</code> <code class="plain">r)</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">    </code><code class="plain">{</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">        </code><code class="comments">// Both sum and count are</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">        </code><code class="comments">// initialize to 0</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">        </code><code class="keyword">int</code> <code class="plain">sum = 0, count = 0;</code></div><div class="line number13 index12 alt2"><code class="undefined spaces"> </code> </div><div class="line number14 index13 alt1"><code class="undefined spaces">        </code><code class="comments">// To calculate sum and number</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">        </code><code class="comments">// of elements in range l to r</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">        </code><code class="keyword">for</code> <code class="plain">(</code><code class="keyword">int</code> <code class="plain">i = l; i <= r; i++) {</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">            </code><code class="plain">sum += arr[i];</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">            </code><code class="plain">count++;</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">        </code><code class="plain">}</code></div><div class="line number20 index19 alt1"><code class="undefined spaces"> </code> </div><div class="line number21 index20 alt2"><code class="undefined spaces">        </code><code class="comments">// Calculate floor value of mean</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">        </code><code class="keyword">int</code> <code class="plain">mean = (</code><code class="keyword">int</code><code class="plain">)Math.Floor((</code><code class="keyword">double</code><code class="plain">)sum / count);</code></div><div class="line number23 index22 alt2"><code class="undefined spaces"> </code> </div><div class="line number24 index23 alt1"><code class="undefined spaces">        </code><code class="comments">// Returns mean of array</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">        </code><code class="comments">// in range l to r</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">        </code><code class="keyword">return</code> <code class="plain">mean;</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">    </code><code class="plain">}</code></div><div class="line number28 index27 alt1"><code class="undefined spaces"> </code> </div><div class="line number29 index28 alt2"><code class="undefined spaces">    </code><code class="comments">// Driver program to test findMean()</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">    </code><code class="keyword">public</code> <code class="keyword">static</code> <code class="keyword">void</code> <code class="plain">Main()</code></div><div class="line number31 index30 alt2"><code class="undefined spaces">    </code><code class="plain">{</code></div><div class="line number32 index31 alt1"><code class="undefined spaces">        </code><code class="keyword">int</code> <code class="plain">[]arr = { 1, 2, 3, 4, 5 };</code></div><div class="line number33 index32 alt2"><code class="undefined spaces">        </code><code class="plain">Console.WriteLine(findMean(arr, 0, 2));</code></div><div class="line number34 index33 alt1"><code class="undefined spaces">        </code><code class="plain">Console.WriteLine(findMean(arr, 1, 3));</code></div><div class="line number35 index34 alt2"><code class="undefined spaces">        </code><code class="plain">Console.WriteLine(findMean(arr, 0, 4));</code></div><div class="line number36 index35 alt1"><code class="undefined spaces">    </code><code class="plain">}</code></div><div class="line number37 index36 alt2"><code class="plain">}</code></div><div class="line number38 index37 alt1"> </div><div class="line number39 index38 alt2"><code class="comments">/*This code is contributed by PrinciRaj1992*/</code></div></div></td></tr></tbody></table></div>


PHP




<?php
// PHP program to find floor
// value of mean in range l to r
 
// To find mean of
// range in l to r
function findMean($arr, $l, $r)
{
    // Both sum and count
    // are initialize to 0
    $sum = 0;
    $count = 0;
 
    // To calculate sum and
    // number of elements in
    // range l to r
    for ($i = $l; $i <= $r; $i++)
    {
        $sum += $arr[$i];
        $count++;
    }
 
    // Calculate floor
    // value of mean
    $mean = floor($sum / $count);
 
    // Returns mean of array
    // in range l to r
    return $mean;
}
 
// Driver Code
$arr = array(1, 2, 3, 4, 5);
echo findMean($arr, 0, 2), "\n";
echo findMean($arr, 1, 3), "\n";
echo findMean($arr, 0, 4), "\n";
 
// This code is contributed by ajit
?>


Javascript




<script>
    // Javascript program to find floor value
    // of mean in range l to r
     
    // To find mean of range in l to r
    function findMean(arr, l, r)
    {
        // Both sum and count are
        // initialize to 0
        let sum = 0, count = 0;
    
        // To calculate sum and number
        // of elements in range l to r
        for (let i = l; i <= r; i++) {
            sum += arr[i];
            count++;
        }
    
        // Calculate floor value of mean
        let mean = Math.floor(sum / count);
    
        // Returns mean of array
        // in range l to r
        return mean;
    }
     
    let arr = [ 1, 2, 3, 4, 5 ];
    document.write(findMean(arr, 0, 2) + "</br>");
    document.write(findMean(arr, 1, 3) + "</br>");
    document.write(findMean(arr, 0, 4) + "</br>");
 
</script>


Output

2
3
3

Time complexity: O(n*q) where q is the number of queries and n is the size of the array. Here in the above code q is 3 as the findMean function is used 3 times.
Auxiliary Space: O(1)

Efficient Approach: We can find sum of 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++





Java




// Java program to find floor value
// of mean in range l to r
import java.io.*;
 
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




<script>
 
// Javascript program to find floor value
// of mean in range l to r
let MAX = 1000005;
let prefixSum = new Array(MAX);
prefixSum.fill(0);
 
// To calculate prefixSum of array
function calculatePrefixSum(arr, n)
{
     
    // Calculate prefix sum of array
    prefixSum[0] = arr[0];
    for(let i = 1; i < n; i++)
        prefixSum[i] = prefixSum[i - 1] + arr[i];
}
 
// To return floor of mean
// in range l to r
function findMean(l, r)
{
    if (l == 0)
       return parseInt(Math.floor(prefixSum[r] /
                      (r + 1)), 10);
      
    // 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 parseInt(Math.floor((prefixSum[r] -
                                prefixSum[l - 1]) /
                                (r - l + 1)), 10);
}
 
// Driver code
let arr = [ 1, 2, 3, 4, 5 ];
let n = arr.length;
calculatePrefixSum(arr, n);
 
document.write(findMean(1, 2) + "</br>");
document.write(findMean(1, 3) + "</br>");
document.write(findMean(1, 4) + "</br>");
 
// This code is contributed by divyeshrabadiya07
 
</script>


C




// C program to find floor value
// of mean in range l to r
#include <stdio.h>
#include <math.h>
 
#define MAX 1000005
 
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);
    printf("%d\n",findMean(0, 2));
    printf("%d\n",findMean(1, 3));
    printf("%d\n",findMean(0, 4));
    return 0;
}


Output

2
3
3

Time complexity: O(n+q) where q is the number of queries and n is the size of the array. Here in the above code q is 3 as the findMean function is used 3 times.
Auxiliary Space: O(k) where k=1000005.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads