首页 > 解决方案 > 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

标签: pythonoptimization

解决方案


你应该尝试使用一些数学。通常,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)

这可能不是最好的解决方案,但您应该尝试一下,因为它可以避免循环。


推荐阅读