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
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.
// 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 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 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 ));
}
} |
# 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 |
<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 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 ?> |
<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> |
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).
// 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 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# 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 |
<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 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;
} |
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.