/**
* 求子数组之和的最大值
*
*/
public class MaxSubSum {
/**
* 最基本的方法:枚举,找到开始,结束位置,求和 这里用到了三个循环,可以做一个优化
*/
public static void execute(int[] array, int len) {
int max = 0;
for (int i = 0; i < len; i++) { // i:start
for (int j = i; j < len; j++) {// j:end
int sum = 0;
for (int k = i; k <= j; k++) {
sum += array[k];
}
max = max < sum ? sum : max;
}
}
System.out.println(max);
}
/**
* 第一种方法的改进版
*/
public static void execute2(int[] array, int len) {
int max = 0;
for (int i = 0; i < len; i++) {
int s = 0;
for (int j = i; j < len; j++) {
s += array[j]; // s 累加 i,j 的值,不用再重新遍因 i,j 的值了
max = max < s ? s : max;
}
}
System.out.println(max);
}
public static void execute3(int[] array, int len) {
int max = array[0], sum = array[0];
for (int i = 1; i < len; i++) {
if (sum < 0)
sum = array[i];
else
sum += array[i];
if (sum > max)
max = sum;
}
System.out.println(max);
}
public static void main(String args[]) {
int[] array = { 1, -2, 3, 5, -3, 2 };
execute(array, array.length);
execute2(array, array.length);
execute3(array, array.length);
}
}
编程之美--求数组连续子串最大和
最新推荐文章于 2019-07-29 18:56:40 发布