题目
对于一个整数数组,求其连续子数组的最大和。
- 测试输入
7
-2 5 3 -6 4 -8 6 - 测试输出
8
分析
可以从后向前考虑问题。数组
空间优化
由递归式可以看出,只需要遍历一遍就可以得到,因此时间复杂度为
代码
import java.util.Scanner;
public class MaxSum {
static int solution(int[] array) {
int n = array.length;
int[] tail = new int[n];
int[] total = new int[n];
tail[0] = total[0] = array[0];
for (int i = 1; i < array.length; i++) {
tail[i] = Math.max(array[i], tail[i - 1] + array[i]);
total[i] = Math.max(total[i - 1], tail[i]);
}
return total[n - 1];
}
static int solution2(int[] array) {
int tail = array[0];
int total = array[0];
for (int i = 1; i < array.length; i++) {
tail = Math.max(array[i], tail + array[i]);
total = Math.max(total, tail);
}
return total;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] array = new int[n];
for (int i = 0; i < n; i++) {
array[i] = sc.nextInt();
}
System.out.println(solution(array));
}
}