Java Program for Mean of range in array
Last Updated :
31 May, 2022
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.
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));
}
}
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).
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));
}
}
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!
Similar Reads
Javascript Program for Mean of range in array 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
3 min read
Mean of range in array Given an array arr[] of n integers and q queries represented by an array queries[][], where queries[i][0] = l and queries[i][1] = r. For each query, the task is to calculate the mean of elements in the range l to r and return its floor value. Examples: Input: arr[] = [3, 7, 2, 8, 5] queries[][] = [[
12 min read
Java Program for Median of two sorted arrays of same size Write a Java program for a given 2 sorted arrays A and B of size n each. the task is to find the median of the array obtained by merging the above 2 arrays(i.e. array of length 2n). The complexity should be O(log(n)). Examples: Input: ar1[] = {1, 12, 15, 26, 38} ar2[] = {2, 13, 17, 30, 45}Output: 16
6 min read
Streams on Arrays in Java 8 In this article, we would be going through stream method of Arrays class which is added in Java 8, it simplifies many operations on arrays as well have improved the efficiency. Addition of different features like lambdas and streams in java 8 have made java efficient to write elegant code which have
7 min read
Array Range Queries The array range query problem can be defined as follows: Given an array of numbers, the array range query problem is to build a data structure that can efficiently answer queries of a particular type mentioned in terms of an interval of the indices. The specific query can be of type - maximum elemen
3 min read