[英]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])
。 如果所有x
和y
輸入都表示整個范圍,那么您肯定會 TLE,因為對prod
的調用必須在整個范圍內循環。
為了避免這種情況,您必須在您的陣列上做一個前綴產品。 這個想法是這樣的:保留第二個數組pref
,其屬性為pref[i] = arr[i] * pref[i-1]
。 因此, pref[i]
將是第i
個 position 和之前arr
中所有內容的乘積。
然后要找到位置i
和j
之間的乘積,您需要pref[j] / pref[i-1]
。 看看你是否能弄清楚為什么這會給出正確的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.