gpt4 book ai didi

python - 查找数组的连续总和

转载 作者:行者123 更新时间:2023-12-01 21:22:47 27 4
gpt4 key购买 nike

我正在应对编码挑战。挑战基本上是要我找到它的 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 个 block 的总和附加到一个新列表。我的最终目标是从此列表中返回 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]

我认为我的逻辑是正确的。我只想知道我在哪里犯了错误。

最佳答案

一个相当有效的解决方案是使用 itertools.islicezip用于生成连续元素组。这消除了对列表进行切片的需要

consecutive_elements = zip(*(islice(inputArray, x, None) for x in range(k)))

islice 生成器生成的示例:

>>> [list(islice(range(5), x, None)) for x in range(3)]
[[0, 1, 2, 3, 4], [1, 2, 3, 4], [2, 3, 4]]

islice(inputArray, x, None) for x in range(k) 从您的输入中创建可迭代对象,切掉越来越多的元素,然后将其传递给 zip明智地加入可迭代元素创建您的组

然后使用 map 生成总和而不是创建中间列表

return max(map(sum, consecutive_elements))

关于python - 查找数组的连续总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63643211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com