已经写过一个最大子段和1了,这里提供书中的另外一种实现:
刚开始我自己的实现过程,是这样的:
思想:即找到所有可能的子段,然后对每个子段求和,计算出最大值
public static int getMaxSum1(){
//效率最低的算法
int max = 0;
int sum = 0;
for (int i=0; i<input.length; i++){
for (int j=0; j<i; j++){
sum = 0;
for (int k=j; k<i; k++){
sum = sum + input[k];
}
if (max < sum){
max = sum;
}
}
}
return max;
}
书中代码:
1.和我的思想一致,但是for循环的方法不同,以至于他的可以优化:
public static int getMaxSum5(){
//效率最低的算法
int max = 0;
int sum = 0;
for (int i=0; i<input.length; i++){
for (int j=i; j<input.length; j++){
sum = 0;
for (int k=i; k<=j; k++){
sum = sum + input[k];
if (sum > max){
max = sum;
}
}
}
}
return max;
}
2.优化的代码:
思想:对于序列abcde来说,因为abcde = abcd + e所以,第三层for循环可以省略
public static int getMaxSum5(){
//效率最低的算法
int max = 0;
int sum = 0;
for (int i=0; i<input.length; i++){
sum = 0;
for (int j=i; j<input.length; j++){
sum = sum + input[j];
if (sum > max){
max = sum;
}
}
}
return max;
}