我最近有一次考试(现在已经结束了),我有一个问题: question
我可以回答这个问题。然而,最后有一个测试用例说,如果该用例的运行时间为<;1s。然而,我的问题是,我无法使运行时低于1秒。下面是我的代码和测试用例。我还要补充一点,我们不允许导入任何软件包
测试用例:
longList = [i for i in range(100000)]
print(calculateAreas(longList,longList[::-1]))
我的代码:
def calculateAreas(w_list,h_list):
width_length = len(w_list)
height_length = len(h_list)
list_of_areas = []
red_area = 0
white_area = 0
yellow_area = 0
for i in range(width_length):
for n in range(height_length):
if (i+n-2) % 3 == 0:
red_area += (w_list[i] * h_list[n])
if (i+n-2) % 3 == 1:
white_area += (w_list[i] * h_list[n])
if (i+n-2) % 3 == 2:
yellow_area += (w_list[i] * h_list[n])
list_of_areas.insert(0, white_area)
list_of_areas.insert(1, yellow_area)
list_of_areas.insert(2, red_area)
tuple_area = tuple(list_of_areas)
return tuple_area
通过使用lru_缓存,可以使函数在需要时间的python代码中变得高效,它存储缓存并减少运行时间
语法-
我想说的是,加速的方法是使用列表理解,并尝试只进行必要的操作。在白色的两个轴上都有一个图案->;黄色->;红色->;白色…,我们可以使用列表理解来分离这些颜色,然后找到每种颜色的总面积。 要在轴中分离颜色,我们可以使用:
假设我们把w_列表[0]上的所有白色值加起来,乘以h_列表[0]上所有白色值的总和,我们将得到大约1/3的白色值。所以我们可以用h_list[1]对w_list[1]重复,用h_list[2]对w_list[2]重复。简言之,我要做的是用3个像这样的网格将白色分开
一个与另一个稍微错位,并使用列表理解来隔离和获取区域,而无需嵌套for循环:
这样我们只通过了3次for循环,在一个包含100000个元素的列表中,我的慢速笔记本电脑上的计时为0.0904秒。如果我能给你一些关于代码的提示:1-尝试直接在列表元素上交互(使用枚举)2-使用'elif'和'else'语句(如果颜色选择'white',你不需要检查它是否为红色)。一般来说,如果您需要加快代码的速度,请尝试避免嵌套循环,想象一下将一个列表中的每个元素与另一个列表中的每个其他元素交互:这就是len(list)**2
相关问题 更多 >
编程相关推荐