例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,那么该数组中连续的最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。
int maxSubSum(int[] a) { int len = a.length; int sum = 0; int maxSum = 0; for(int i=0; i<len; i++) { sum += a[i]; if(sum > 0){ if(sum > maxSum) { maxSum = sum; } } else { sum = 0; } } return maxSum; }
import java.util.Scanner;
public class test18 {
public static void main(String[] args) {
int[] a = { 1, -2, 3, 10, -4, 7, 2, -5 };
int len = a.length;
int[] dp = new int[len + 1];
dp[0] = 0;
int res = Integer.MIN_VALUE;
for (int i = 1; i < len; i++) {
dp[i] = Math.max(dp[i - 1] + a[i], dp[i]);
res = Math.max(dp[i], res);
}
System.out.println(res);
}
}
public class Test4 {