我有一段工作代码,但HackerEarth的在线评判不断返回计时错误。我是编码的新手,所以我不知道加速我的代码的技巧。任何帮助将不胜感激!
N, Q = map(int, input().split())
#N is the length of the array, Q is the number of queries
in_list =input().split()
#input is a list of integers separated by a space
array = list(map(int, in_list))
from numpy import mean
means=[]
for i in range(Q):
L, R = map(int, input().split())
m= int(mean(array[L-1:R]))
means.append(m)
for i in means:
print(i)
任何建议都会很棒!
答案 0 :(得分:2)
您可能需要避免在循环中执行O(N)
操作。目前切片和mean
调用(需要总结切片中的项目)都很慢。所以你需要一个更好的算法。
我建议你对数字列表进行一些预处理,这样你就可以计算切片中将的值之和(实际上没有切片和加起来)。通过使用O(N)
空格,您可以在O(1)
时间内计算每个总和(使整个过程花费O(N + Q)
时间而不是O(N * Q)
。
这是我放在一起的快速解决方案,使用itertools.accumulate
查找列表项的累积总和。我实际上并没有自己保存这些项目,因为累积金额足够了。
from itertools import accumulate
N, Q = map(int, input().split())
sums = list(accumulate(map(int, input().split())))
for _ in range(Q):
L, R = map(int, input().split())
print((sums[R] - (sums[L-1] if L > 0 else 0)) / (R-L+1))