本文记录最大连续子序列和问题的两种解法:前缀和方法 和 动态规划方法。
从一个可能包含负数的整数数组中,找出其连续子数组的和的最大值。
前缀和 sum(i) 是指以位置 i 结尾的前缀子数组的求和结果:
要使右侧区间内数字之和最大, 势必要求左侧前缀和 sum(i-1) 最小。
也就是,要找出 j 左边的前缀和的最小值,它可以在计算前缀和的过程中记录下来。
最后,对所有 j 找出其右侧区间的最大和 ,记录其中最大的即结果。
任何连续数组,都可以表达为:以位置 i 结尾的连续数组。
假设函数 dp(i) 是所有以位置 i 结尾的连续数组的和的最大值。