gpt4 book ai didi

python - 如何从两侧找到最大数组

转载 作者:行者123 更新时间:2023-12-02 16:06:46 24 4
gpt4 key购买 nike

给定一个整数数组 A,我需要从数组 A 的左端或右端选择 B 元素以获得最大和.如果 B = 4,那么您可以选择前四个元素或后四个元素,或者一个在前面,三个在后面等等。

示例输入:

A = [5, -2, 3, 1, 2]
B = 3

正确答案是 8(从左边选择 5,从左边选择 12对)。

我的代码:

def solve(A, B):
n = len(A)
# track left most index and right most index i,j
i = 0
j = n-1
Sum = 0
B2 = B # B for looping and B2 for reference it
# Add element from front
for k in range(B):
Sum += A[k]

ans = Sum
# Add element from last
for _ in range(B2):
# Remove element from front
Sum -= A[i]
# Add element from last
Sum += A[j]
ans = max(ans, Sum)

return ans

但我得到的答案是 6

最佳答案

解决方案

def max_bookend_sum(x, n):
bookends = x[-n:] + x[:n]
return max(sum(bookends[i : i + n]) for i in range(n + 1))

解释

n = 3并取x,

>>> x = [4, 9, -7, 4, 0, 4, -9, -8, -6, 9]

获取“右”n 元素,与“左”n 连接:

>>> bookends = x[-n:] + x[:n]
>>> bookends # last three elements from x, then first three
[-8, -6, 9, 4, 9, -7]

获取 n 元素的“滑动窗口”组:

>>> [bookends[i : i + n] for i in range(n + 1)]
[[-8, -6, 9], [-6, 9, 4], [9, 4, 9], [4, 9, -7]]

现在,不是生成子列表,而是对它们求和,取最大值:

>>>  max(sum(bookends[i : i + n]) for i in range(n + 1))
22

对于评论中的大型数组 A:

>>> max(sum(bookends[i : i + n]) for i in range(n + 1))
6253

关于python - 如何从两侧找到最大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69240080/

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