我试图理解这个问题的解决方法:“给定一个数字序列,求这些数字的连续子序列的最大和。”我引用了下面的一个解决方案和解释。在
我不明白的是,在“maxendinghere=max(maxendinghere+s,0)”一行中,为什么maxendinghere会为零?在def max_sum_subsequence(seq):
maxsofar = 0
maxendinghere = 0
for s in seq:
# invariant: maxendinghere and maxsofar are accurate
# are accurate up to s
maxendinghere = max(maxendinghere + s, 0)
maxsofar = max(maxsofar, maxendinghere)
return maxsofar
该网站的解释是“好吧,基本上maxendinghere就是积累子序列的东西——它不断地将下一个元素滚动到自己的内部。如果这个累计和变为负数,我们知道我们当前跟踪的结束于此的子序列比重新开始的空子序列更糟糕;因此,我们可以重置子序列累加器,循环不变量的第一个子句仍然有效。”
我不明白的是,假设我的序列是2-34:为什么maxendinghere会为零?没有和为零的子序列。在