我是 python 的新手,我遇到了这个特定的代码片段来计算序列中的最大切片,但是我似乎无法理解以下代码
best = A[0]
for size in range(1,n+1):
cur = sum(A[:size])
for i in range(n-size):
cur += A[i+size] -= A[i] # <- what happens here?
best = max(best, cur)
任何关于代码如何运作的想法,尤其是关于那一行的任何想法都会有所帮助!
首先,您的代码中的错误是一个额外的 =
.工作代码:
n = len(A)
best = A[0]
for size in range(1,n+1):
cur = sum(A[:size])
for i in range(n-size):
cur += A[i+size] - A[i] # <- what happens here?
best = max(best, cur)
外层 for 循环创建越来越大的切片,从 size
开始设置为 1。 然后 cur
设置为第一个 size
的总和A
的项目.
在内部循环中,通过将值添加到切片右侧 (A[i+size]
) 并减去切片的第一个值 (A[i]
),将此切片“移动”到右侧。
最后best
设置为新计算的总和和目前找到的最大值中较大的一个。
最后,best
包含最大的和。除非A
包含负值,答案很简单:sum(A)
.
编辑: 我刚刚注意到有一个错误:最左边的切片不计算在内,切片大小 1 ( best = A[0]
) 除外。所以如果A = [4, 3, 2]
它输出 5
而不是 9
.通过添加 best = max(best, cur)
进行修复内部 for 循环上方的行。