Open In App

Python3 Program for Mean of range in array

Last Updated : 31 May, 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 the 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

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.  

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


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

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


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.

Please refer complete article on Mean of range in array for more details!



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

Similar Reads