首页 > 解决方案 > 使用python以最佳方式查找列表的最小总和

问题描述

我试图解决编码挑战,其中指出:

给定一个列表“L”和替换数量“k”。

第 1 步:在第 1 次迭代中,从“L”中找到任意数字,将其减半,然后通过四舍五入将其替换为整数。第 2 步:重复第 1 步进行“k”这样的操作,最终我们得到minimum sum列表“L”中所有元素的第一个。

例子:

   L=[1,2,2,3] k=4
     [1,2,2,2] replaced 3 by 2 ( round(3/2)=2)
     [1,2,2,1] replaced 2 by 1
     [1,2,1,1] replaced 2 by 1
     [1,1,1,1] replaced 2 by 1

所以总和是 4 和它的最小值。注意:数组可能未排序。

我尝试了这种方法:

        def fun(L,k):
           for i in range(k):
                L.sort()
                num=round(L[-1]/2)
                L[-1]=num
           return sum(L)

由于时间复杂性,这种方法显示“超时”。

有没有最佳的方法来解决这个问题。

标签: pythonpython-3.x

解决方案


尝试这个:

nums = [1,2,3,4]

def fun(L, K):
    return sum([round(i/2) for i in L])

print(fun(nums, 4))

如果您对此语法感到困惑,请参阅列表推导。


推荐阅读