给定一个由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