📜  数组中范围平均值的Python3程序

📅  最后修改于: 2022-05-13 01:55:42.277000             🧑  作者: Mango

数组中范围平均值的Python3程序

给定一个包含 n 个整数的数组。给你 q 个查询。编写一个程序,在新行中为每个查询打印从 l 到 r 范围内的均值的下限值。

例子 :

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

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

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


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


输出 :

2
3
3

时间复杂度: O(n)

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

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

输出:

2
3
3

有关更多详细信息,请参阅有关数组范围平均值的完整文章!