例如输入的数组为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 {