在python中优化程序

时间:2014-02-11 23:20:10

标签: python optimization

我正在尝试在HackerRank上解决这个问题:

  

Animesh有N个空糖果罐,编号从1到N,容量无限。他表演M.   操作。每个操作由3个整数a,b和k描述,其中a和b是>罐的索引,k是在每个罐内添加的糖果的数量,其中索引在a和b之间(包括两者)。你可以告诉M操作后的平均糖果数量吗?   我在Python 3中编写了以下代码:

def operate(a, b, k, array):
    for i in range(a - 1, b):
        array[i] += k
def mean(array):
    return int(sum(array) / len(array))
splitinput = [int(x) for x in input().split()]
candy = []
for i in range(splitinput[0]):
    candy.append(0)
for j in range(splitinput[1]):
    splitinput2 = input().split()
    operate(int(splitinput2[0]), int(splitinput2[1]), int(splitinput2[2]), candy)
print(mean(candy))

它有效,但在一些测试用例上超时。我怎么能更快地做到这一点?我已经在Python中编写了一段时间,但优化的细节仍然无法实现。

1 个答案:

答案 0 :(得分:2)

你不关心糖果在哪里。只要您知道有多少糖果和多少罐子,您就可以计算出平均值。因此,你可以保留所有糖果的一个数量:

jars, ops = map(int, input().split())
candies = 0
for i in range(ops):
    a, b, k = map(int, input().split())
    candies += k*(b-a+1)
print candies / jars

这避免了必须跟踪N个单独的计数或为每个操作增加k个计数器。当你得到大的k值时,这非常重要。