Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
最佳旅行时间算法(Codewars)通过了一些测试。python_Python_Algorithm - Fatal编程技术网

最佳旅行时间算法(Codewars)通过了一些测试。python

最佳旅行时间算法(Codewars)通过了一些测试。python,python,algorithm,Python,Algorithm,如果我没有恰当地表达我的问题,我很抱歉,但我正在解决一个代码战算法,该算法表明:约翰和玛丽想在几个城镇之间旅行a、B、C。。。玛丽在一张纸上列出了这些城镇之间的距离。ls=[50,55,57,58,60]。约翰厌倦了开车,他对玛丽说,他不想开车超过174英里,他只会去3个城镇 例如: 通过列表ls和3个城镇,他们可以在[50,55,57]、[50,55,58]、[50,55,60]、[50,57,58]、[50,57,60]、[50,58,60]、[55,57,58]、[55,57,60]、[5

如果我没有恰当地表达我的问题,我很抱歉,但我正在解决一个代码战算法,该算法表明:约翰和玛丽想在几个城镇之间旅行a、B、C。。。玛丽在一张纸上列出了这些城镇之间的距离。ls=[50,55,57,58,60]。约翰厌倦了开车,他对玛丽说,他不想开车超过174英里,他只会去3个城镇

例如:

通过列表ls和3个城镇,他们可以在[50,55,57]、[50,55,58]、[50,55,60]、[50,57,58]、[50,57,60]、[50,58,60]、[55,57,58]、[55,57,60]、[55,58,60]、[57,58,60]之间进行选择

距离之和为:1621631651651671681701721773175

考虑到174的限制,最大可能的总和是173,相应的3个城镇的距离是[55,58,60]

函数ChooseSestsum(或choose_best_sum或…取决于语言)将作为参数t(最大距离之和,整数>=0)、k(要访问的城镇数量,k>=1)和ls(距离列表,所有距离都是正整数或空整数,此列表至少有一个元素)。该函数返回“最佳”和,即小于或等于给定极限t的k个距离的最大可能和(如果该和存在),或者根据语言返回nil、null、None、Nothing。用C++、C、RIST、SWIFT、GO、Kotlin返回- 1。 示例:

ts=[50,55,56,57,58]选择最佳和(163,3,ts)->163

xs=[50]选择最佳和(163,3,xs)->nil(或null或…或-1(C++,C,Rust,Swift,Go)

ys=[91,74,73,85,73,81,87]选择最佳和(230,3,ys)->228


这是我迄今为止编写的代码,只有2/3的测试用例通过。对于一个测试用例,选择_best_sum(230,4,xs),它应该返回230,但我的代码返回226。我不确定为什么。 这些测试用例适用于这个列表:xs=[100,76,56,44,89,73,68,56,64,123,2333,144,50,132,123,34,89]

选择最佳和(430,5,xs),430) 选择最佳总和(430,8,x),无)

def选择最佳和(t,k,ls):
most=0
对于范围内的i(透镜(ls)-1):
地址=0
如果i+k>len(ls)-1:
打破
对于范围(i,i+k-1)内的j:
addN+=ls[j]
对于范围内的p(i+k-1,len(ls)-1):
addN+=ls[p]

如果addN>most和addN,你是如何一步一步走的?你的代码是做什么的?它背后的想法是什么?是的,代码将整数相加到k,下一个for循环从k一直迭代到列表末尾,每次添加并检查它是否大于最大值但小于或等于目标值。如果不是,那么我们减去并迭代到下一个结尾。这种方法的问题是你只检查k个城市,其中第一个k-1相邻。您只允许将这些k个城市中的最后一个(
p
)与其他城市分开,这些城市在
i:i+k-1
范围内保持相邻。你们真的需要一个不同的方法。谢谢你们的回复。我懂了。我会尝试一种新的方法谢谢。你一步一步走得怎么样?你的代码是做什么的?它背后的想法是什么?是的,代码将整数相加到k,下一个for循环从k一直迭代到列表末尾,每次添加并检查它是否大于最大值但小于或等于目标值。如果不是,那么我们减去并迭代到下一个结尾。这种方法的问题是你只检查k个城市,其中第一个k-1相邻。您只允许将这些k个城市中的最后一个(
p
)与其他城市分开,这些城市在
i:i+k-1
范围内保持相邻。你们真的需要一个不同的方法。谢谢你们的回复。我懂了。我会尝试一种新的方法谢谢。
def choose_best_sum(t, k, ls):
    most = 0

    for i in range(len(ls)-1):
        addN = 0
        if i +k > len(ls) - 1:
            break
        for j in range(i,i+k-1):
            addN += ls[j]
        for p in range(i+k-1,len(ls)-1):
            addN += ls[p]
            if addN > most and addN <= t:
                most = addN
                addN -= ls[p]
            else:
                addN -= ls[p]
    if most == 0:
        return None
    return most