给定一个数组,找出其中和最大的一串连续数字。
输出和最大的连续子串的区间,即第一个数字的位置和最后一个数字的位置,并输出这个最大和。
示例:
输入 6 -1 5 4 -7 输出 1 4 14 解释: 区间在1-4 的和为最大,和为6+(-1)+5+4 = 14
代码:
private static void func(int n, int[] nums, ArrayListresult) { int[] dp = new int[n + 1]; dp[0] = nums[0]; int max = 0; int start = 0; int end = 0; dp[1] = Math.max(dp[0],dp[0] + nums[1]); for (int i = 1; i < n; i++) { if(dp[i - 1] > 0) { dp[i] = dp[i - 1] + nums[i]; end = i; } else { dp[i] = nums[i]; start = i; } max = Math.max(max,dp[i]); } result.add(start + 1); result.add(end); result.add(max); }


![[算法-动态规划] 数组最大子串的区间和 [算法-动态规划] 数组最大子串的区间和](http://www.mshxw.com/aiimages/31/784735.png)
