题目描述
给定一个数组,找出其中和最大的一串连续数字。
输出和最大的连续子串的区间,即第一个数字的位置和最后一个数字的位置,并输出这个最大和。
示例:
输入
6 -1 5 4 -7
输出
1 4 14
解释:
区间在1-4 的和为最大,和为6+(-1)+5+4 = 14
代码:
private static void func(int n, int[] nums, ArrayList<Integer> result) {
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);
}