数组中距离的平均值

给定一个由n个整数组成的数组。您会收到q查询。编写一个程序,在新行中为每个查询打印l到r范围内的平均下限值。

null

例如:

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

天真的方法: 我们可以为每个查询l到r运行循环,并找到范围内元素的总和和数量。在此之后,我们可以打印每个查询的平均值。

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;
}


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

<?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), "" ;
echo findMean( $arr , 1, 3), "" ;
echo findMean( $arr , 0, 4), "" ;
// 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>


输出:

233

时间复杂性: O(n)

有效方法: 我们可以通过使用 前缀和 .前缀[i]表示前i个元素的和。所以从l到r范围内的数字之和将是prefixSum[r]–prefixSum[l-1]。l到r范围内的元素数量将为r–l+1。所以我们现在可以打印O(1)中l到r范围的平均值。

C++

// CPP program to find floor value
// of mean in range l to r
#include <bits/stdc++.h>
#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

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


输出:

233

本文由 努克洛德 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享