<pre>
include<stdio.h>
int maxSub(int a[], int N,int first,int end);
int main(){
int len,first=0,end=0;
int first_P = &first;
int end_P = &end;
scanf("%d",&len);
int i ;
int nums[len];
for(i=0;i<len;i++){
scanf("%d",&nums[i]);
}
printf("%d",maxSub(nums,len,first_P,end_P));
printf(" %d %d",first_P,end_P);
return 0;
}
int maxSub(int a[], int N,int first_P,int end_P){
int maxSum, thisSum, i,first_temp;
char flag=0;// 是否为这一段子列的开始
maxSum = thisSum = 0;
char flag_PN=0;// 是否全部为负
for(i = 0; i <N; i++){
if(a[i]>=0){
flag_PN =1;
}
thisSum += a[i];
if(flag==0){
// 记录第一个
first_temp= a[i];
flag=1;
}
if(thisSum> maxSum){
maxSum = thisSum;
*first_P=first_temp;
*end_P = a[i];// 不断更新最后一个
}else if(thisSum < 0){
thisSum = 0;
flag=0;// 如果这段字列不行,爆掉
}
}
// 若全部为负
if(flag_PN==0){
maxSum=0;
*first_P=a[0];
*end_P =a[N-1];
}
return maxSum;
}
</pre>
网友评论