python - python优化介绍
问题描述
问题陈述 :
建造一座建筑,它将是一堆 n 个立方体。底部的立方体的体积为 n^3,上面的立方体的体积为 (n-1)^3,依此类推,直到顶部的体积为 1^3。
给定建筑物的总体积 m。给定 m 你能找到你必须建造的立方体的数量 n 吗?
函数 findNb (find_nb, find-nb, findNb) 的参数将是一个整数 m 并且您必须返回整数 n 例如 n^3 + (n-1)^3 + ... + 1^3 =如果存在这样的一个,则为 m,如果不存在这样的 n,则为 -1。
下面的代码在数学上是正确的,并且会计算出正确的值,但在代码战上提交时会失败。该消息说,如果在他们的服务器上执行的时间超过 12 秒,则需要进行更多优化。谢谢您的帮助。
def find_nb(m):
# your code
n = int(m**(1./3.))
#print (n)
total_volume = 0
for i in range (1,n+1):
#print (i*i*i)
total_volume+= i*i*i
#print (total_volume)
if(total_volume == m):
#print (i)
return i
break
return -1
解决方案
你应该尝试使用一些数学。通常,k=1 到 n 的 k^3 之和为 (n(n+1)/2)^2。所以
def find_nb(m):
i=0
while int((i(i+1)/2)**2) < m:
i += 1
if ((i(i+1)/2)^2) == m:
return(i)
return(-1)
这可能不是最好的解决方案,但您应该尝试一下,因为它可以避免循环。