编写一个程序,找到具有最大总和的数字的子序列。 例如:{2,3--6,-1,2,-1,6,4,-8,8}
第二种方法是使用一个循环通过数组从左到右扫描它并对元素求和。 一旦我们得到负数,我们就可以 重新开始从下一个元素求和。想想为什么这是正确的!在每一步,我们检查当前总和是否大于当前最大值
我不清楚这个解决方案是如何运作的......虽然我通过另一种方式解决了这个问题但我无法解决这个问题我不明白这个解决方案......你能解释一下吗?提前感谢您的帮助。
编辑:我通过另一种方式解决了这个问题,而不是我不理解的事情:)
答案 0 :(得分:0)
正如您所说,您在一个循环中迭代数组并累积总和S
。在每一步中,您S += a[i]
并将S
与当前最大值max = Math.max(S, a[i])
进行比较。
您的问题是为什么我们应该在S
时归零S < 0
。让我们说它发生在步骤i
上。 然后(S + a[i+1]) < a[i+1]
(因为S&lt; 0)。由于我们正在寻找最大的后续和,因此最好从a[i+1]
开始新的子序列,即设置S = 0
。< / p>