簡體   English   中英

如何優化以下 Python 代碼,以防止超時?

[英]How can I optimize the following Python code, to prevent time exeption?

大家。 我寫了以下代碼。 當我在某些測試用例中提交編譯器編寫時間限制超過 2.069s / 13.33Mb 時,請幫助我優化這一點。

import math

N = int(input())
arr = [None]*N; new_list = []
stepen = 0; res = .0;

arr = input().split(" ")
arr = [float(h) for h in arr]

Q = int(input())
 
for j in range(Q):
    x, y = input().split()
    new_list.extend([int(x), int(y)])
        
for i, j in zip(new_list[0::2], new_list[1::2]):
    stepen = (j - i)+ 1
    res = math.prod(arr[i:j+1])
    print(pow(res, 1./stepen))

算法中最慢的是math.prod(arr[i:j+1]) 如果所有xy輸入都表示整個范圍,那么您肯定會 TLE,因為對prod的調用必須在整個范圍內循環。

為了避免這種情況,您必須在您的陣列上做一個前綴產品。 這個想法是這樣的:保留第二個數組pref ,其屬性為pref[i] = arr[i] * pref[i-1] 因此, pref[i]將是第i個 position 和之前arr中所有內容的乘積。

然后要找到位置ij之間的乘積,您需要pref[j] / pref[i-1] 看看你是否能弄清楚為什么這會給出正確的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM