给一个数组,返回它的最大连续子序列的和。例,{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。
这是经典动态规划题,我隐约回忆起算法课讲过到算到到目前索引的和,但是没有考虑到负数的情况,开始遇负和0比较,想得太狭窄了。
状态转移方程:prefix[i] = max(array[i], prefix[i-1]+array[i])
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
int ans = array[0];
int[] prefix = new int[array.length];
prefix[0] = array[0];
for(int i = 1; i < array.length; i++){
prefix[i] = Math.max(prefix[i-1] + array[i], array[i]);
ans = Math.max(ans, prefix[i]);
}
return ans;
}
}