题目:
下面分别介绍了四种方法,相应的时间复杂度依次递减。
int maxadd(int A[],int N){
int Max=0;
for(int i=0;iMax){
Max=This_add;
}
}
}
return Max;
}
int maxadd(int A[],int N){
int Max=0;
for(int i=0;iMax){
Max=This_add;
}
}
}
return Max;
}
int maxadd(int A[],int left,int right){
int boundry=0;//二分边界
int max_left=0,max_right=0;//左右分段的最大子列和
int max_boundry_left=0,max_boundry_right=0;//跨越边界的最大子列和
int This_add_left=0;
int This_add_right=0;
boundry=(right-left)/2;
max_left=maxadd(int A[],int left,int boundry);
max_right=maxadd(int A[],int boundry+1,int right);
//递归终止条件
if(left==right){
if(A[left]<=0){
return 0;
}
else{
return A[left];
}
}
//获取左右区间融合的最大子列和
for(int i=boundry;i>=left;i--){
This_add_left+=A[i];
if(max_boundry_left
int maxadd3(int A[], int N) {
int Max = 0;
int This_add = 0;
for (int i = 0; i < N; i++) {
This_add += A[i];
if (This_add > Max)
Max = This_add;
else if(This_add<=0)
This_add = 0;
}
return Max;
}