繁体   English   中英

有人可以帮我优化下面的 python 代码吗,我在某些测试用例中遇到超时异常

[英]Can someone help me in optimising the below python code, I am getting timeout exception for some of the test cases

有人可以帮我优化下面的代码。

power = [2,3,2,1]

noElement = len(power)
result = 0
for i in range(noElement):
    sum = 0
    minEleme = float('inf')
    for j in range(i, noElement):
        minEleme = min(minEleme,power[j])
        sum+=power[j]
        result += (minEleme*sum)%1000000007
        print("min : ",minEleme,"sum : ",sum,"result : " ,result)
print(result)

问题:一家公司有n台服务器。 第 i 个服务器的功率是 power[i]。 一组连续服务器 [l,r] 的功率可以计算为

公式

找到所有可能的连续服务器组的幂的总和。根据输入值,答案可能很大,因此返回答案模 1000000007

1<= n <= 8*100000

1<= 幂[i] <= 1000000000

示例:power=[2,3,2,1]

Power[0,0] => min([2]) * sum([2]) => 2 * 2 = 4.
Power[0,1] => min([2,3]) * sum([2,3]) => 2 * (2+3) = 10
Power[0,2] = 14
Power[0,3] = 8
Power[1,2] = 10
Power[1,3] = 6
Power[2,2] = 4
Power[2,3] = 3
Power[3,3] = 1

幂和 = 69。返回 69%1000000007。

鉴于作为问题的一部分给出的公式(在图像中),答案不是简单的:

def group_power(power, l, r):
    return min(power[l:r+1]) * sum(power[l:r+1])


answer = group_power(power=[2,3,2,1], l=1, r=3)
print(answer)

从您共享的代码中不清楚lr甚至进入其中,您只是共享了一小部分power 我看不出这会如何发生超时。

从您的评论来看,您似乎想要每个可能范围的组幂的总和,然后您想要结果以某个值为模:

def group_power_calc(power, modulo):
    return sum(
        min(power[l:r+1]) * sum(power[l:r+1])
        for l in range(len(power))
        for r in range(l, len(power))
    ) % modulo


answer = group_power_calc(power=[2, 3, 2, 1], modulo=1000000007)
print(answer)

结果:

69

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM