【发布时间】:2021-12-21 11:08:20
【问题描述】:
我无法让this 算法工作。部分和数组 B[] 是什么?它是否比 A[] 少 1 个元素?对于A = [8, -1, -1, 4, -2, -3, 5, 6, -3],它看起来像B = [7, 6, 10, 8, 5, 10, 16, 13]
尝试了以下 Python 代码:
def maxSubseq(a, k):
maxSum = -999999999999
b = [a[0] + a[1]]
for x in range(1, len(a) - 1):
b.append(b[x - 1] + a[x + 1])
from collections import deque
deq = deque()
for q in range(len(b)):
if deq and q - deq[0] > k:
deq.popleft()
while deq and b[deq[-1]] > b[q]:
deq.pop()
deq.append(q)
if b[q] - b[deq[0]] > maxSum:
maxSum = b[q] - b[deq[0]]
return maxSum
print(maxSubseq([8, -1, -1, 4, -2, -3, 5, 6, -3], 8))
11 - 但应该是 16
【问题讨论】:
-
B[] 应该是 [8, 7, 6, 10, 8, 5, 10, 16, 13] 并且大小与 A[] 相同。
-
@aropan 昨天也试过了,结果还是
print(maxSubseq([8, -1, -1, 4, -2, -3, 5, 6, -3], 8))== 11 -
使用您的代码,您会错过仅包含第一个元素的子数组。您错过了
A[]中的子数组[8],因为您以b = [a[0] + a[1]]而不是b=[a[0]]开头。这就是为什么A[]和B[]的长度不同的原因。