最佳旅行时间算法(Codewars)通过了一些测试。python
如果我没有恰当地表达我的问题,我很抱歉,但我正在解决一个代码战算法,该算法表明:约翰和玛丽想在几个城镇之间旅行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最佳旅行时间算法(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
这是我迄今为止编写的代码,只有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