我正在经历一个编码挑战。这个挑战主要是要我找到它的k个连续元素的最大和。以下是一个例子:
对于inputArray = [2, 3, 5, 1, 6]
和k = 2
,输出应该是
arrayMaxConsecutiveSum(inputArray, k) = 8
。
2个连续元素的所有可能总和为:
2 + 3 = 5;
3 + 5 = 8;
5 + 1 = 6;
1 + 6 = 7.
因此,答案是8
这是我的尝试。我将连续的总和视为子列表。因此,如果我有k=3
,那么我必须在I之后添加2个元素。因此,如果开始是索引0,那么结束是开始+k-1。然后我尝试使用for循环将每k个块的总和附加到一个新列表中。我的最终目标是从这个列表中返回max()
:
def arrayMaxConsecutiveSum(inputArray, k):
begin = 0
end = begin + (k-1)
sum_list = []
for i in range(0, len(inputArray)):
begin = i
sum_list.append(sum(inputArray[begin:end+1]))
print(sum_list)
现在我只想看看我的sum_list
在返回其最大值之前是什么样子。但是,这是它为测试用例返回的结果:
Input: inputArray: [2, 3, 5, 1, 6]
k: 2
Output: null
Expected Output: 8
Console Output: [5, 3, 0, 0, 0]
我认为我的逻辑是正确的。我只想知道我在哪里犯了错误
在这种情况下,取给定索引到索引+k的总和(5-(k-1))次,取最大值
如果您想要更具可读性且不使用任何其他库(如
itertools
),您可以尝试使用以下一行程序-调试代码:
代码中有一些错误。首先,定义循环外部的端点。当开始更改时,您希望循环中的结束也更改。另外,由于python已经考虑了end的
n-1
索引,所以只需要将其设置为begin+k
而不是begin+(k-1)
。接下来,您需要将迭代器从0移动到length或array-1,因为最后一项只是一个元素。如果您想知道哪里出了问题,我已经修改了代码,使其按照您的预期运行-一个相当有效的解决方案是使用^{} 和^{} 生成连续元素的组。这样就不需要对列表进行切片
islice生成器生成内容的示例:
islice(inputArray, x, None) for x in range(k)
从您的输入中创建iterables,该输入会切掉越来越多的元素,将其传递给zip
,然后在创建组时加入iterables元素然后使用
map
生成总和,而不是创建中间列表相关问题 更多 >
编程相关推荐