蛮力法
一个由n个整数(可以有负整数)组成的序列:a1,a2,…,an,寻找它的最大字段和,例如:A1=a1,A2=a1+a2,A3=a1+a2+a3;B2=a2+a3;
1、用序列存放在数组中,下标从0-n;例如:
-1 | 2 | 4 | 0 | 5 |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
2、初始化定义两个变量:sum、maxsum ;sum用来存放连续字段的和,与maxsum比较,比maxsum大,将sum值赋给maxsum,所有可能的连续字段求和后,保证maxsum是最大的字段和。
3、编写maxSum方法:定义两个指针:i,j使用两个for循环;
int maxSum=0;
for(int i=0;i<n;i++){
int sum=0;
for(int j=i;j<n;J++){
sum+=a[j]; //sum=sum+a[j]
if(sum>maxSum){
maxSum=sum; //将大值一直赋给maxSum
}
}
}
在i=0的循环内嵌套for循环,j从下标0开始,遍历,sum=sum+a[j];判断sum与maxSum的大小,将大值赋给maxSum。
遍历完内层循环,i++;i指向下标1,内层循环同样重复以上步骤。
伪代码:
输入:a[],数组长度n
输出:最大字段和maxSum
-
传入数组元素,数组长度n;
-
定义sum存放字段和,maxSum存放最大字段和,定义指针:i,j
-
进入第一个for循环,i=0,i<n,I++;
3.1maxsum=0;进入第二个for循环,j=i,J<n,J++;
3.1.1sum+=a[j];如果sum>maxSum;maxSum=sum;
-
重复以上步骤,求出maxSum;