使用动态规划,这里用dp[]数组表示以下标i为终点的最大连续子数组和。
遍历整个数组,每当遇到一个新元素时有两种情况,要么加上它会更大,要么加上它会更小。所以dp的状态转换应该为:dp[i] = Math.max(array[i],dp[i-1]+array[i]);
public int FindGreatestSumOfSubArray (int[] array) {
int[] dp = new int[array.length];
dp[0] = array[0];
int max = array[0];
for (int i = 1; i < array.length; i++) {
dp[i] = Math.max(array[i],dp[i-1]+array[i]);
max = Math.max(max,dp[i]);
}
return max;
}