如何优化下面的Python代码,以防止时间执行?

2024-09-30 10:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好。我编写了以下代码。请帮助我优化这个,当我在一些测试用例中提交编译器的编写时间限制超过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))


Tags: 代码innewforinput编译器时间测试用例
1条回答
网友
1楼 · 发布于 2024-09-30 10:30:35

算法中最慢的是math.prod(arr[i:j+1])。如果所有的xy输入都表示整个范围,那么您肯定会发现,因为对prod的调用必须在整个范围内循环

为了避免这种情况,必须在数组中使用前缀乘积。其思想是:保留第二个数组pref,其属性为pref[i] = arr[i] * pref[i-1]。因此,pref[i]将是第i位和第arr位之前的所有内容的产物

然后要查找位置ij之间的乘积,需要pref[j] / pref[i-1]。看看你是否能找出为什么这会给出正确的答案

相关问题 更多 >

    热门问题