数组中范围平均值的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
有关更多详细信息,请参阅有关数组范围平均值的完整文章!