簡體   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