算法 给定N个整数序列{A1,A2,....,An}求所有子序列之和的最大值

算法 给定N个整数序列{A1,A2,....,An}求所有子序列之和的最大值_第1张图片
最简单的算法:

int Max1(int A[],int N){
int sum1,maxsum=0,i,j,k;
for(i=0;i<N;i++){
for(j=i;j<N;j++){
sum1=0;
for(k=i;k<=j;k++){
sum1+=A[k];
if(sum1>maxsum){
maxsum=sum1;
}}
}
}
return maxsum;
}

这个算法的时间复杂度
在这里插入图片描述
太高,肯定得优化。
对于相同的i,不同的j我们只需要加上下一项,求和就可以了,这样可以减少一个for循环

int Max1(int A[],int N){
int sum1,maxsum=0,i,j,k;
for(i=0;i<N;i++){
	sum1=0;
for(j=i;j<N;j++){

sum1+=A[j];
if(sum1>maxsum){
maxsum=sum1;
}
}
}
return maxsum;
}

时间复杂度
在这里插入图片描述
利用分而治之的算法思想解决这个问题
折半思想

在这里插入图片描述

你可能感兴趣的:(数据结构,C++,数据结构,算法)