求连续子数组的最大和解法一:三层循环,时间复杂度为(o(n^3))
思路:思路简单,做法暴力。确定一个首元素,一个尾元素,将这两个元素中间的值都加起来,计算每一个子序列的和,取最大的那个值。
public static int maxSubSum1(int a[]) {
int max = Integer.MIN_VALUE;
for (int i = 0; i < a.length; i++) {
for (int j = i; j < a.length; j++) {
int sum = 0;
for (int k = i; k <= j; k++) {
sum += a[k];
}
max = Math.max(max, sum);
}
}
return max;
}
求连续子数组的最大和解法二:两层循环,时间复杂度为(o(n^2)
思路:改进三层循环,确定首元素后,加到某个尾元素时,没必要重复计算当前元素以前的和值,累计就可以。仍然保存这过程中的最大值。
public static int maxSubSum2(int a[]) {
int max = Integer.MIN_VALUE;
for (int i = 0; i < a.length; i++) {
int sum = a[i];