给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
LeetCode要求Maxsum是负数时,直接输出,PTA要求输出为0;
PTA还要求输出最大子序和自序的第一个和最后一个元素
以下是PTA的代码:
#include <stdio.h>
int main(){
int Num;
int i,j,m,n,temp,count=0;
int Thissum=0,Maxsum=0;
int a[100000]={0};
scanf("%d",&Num);
for(i=0;i<Num;i++){
scanf("%d",&a[i]);
}
for(j=0;j<Num;j++){
//if(a[j]==0)
Thissum=Thissum+a[j];
if(Thissum>=Maxsum){
if(Thissum!=Maxsum||(Thissum==0&&Maxsum==0)){ //能够确保只有负数和0时正确输出结果
Maxsum=Thissum;
m=temp;
n=j;
}
}
else if(Thissum<0){ //如果Thissum<0,直接舍去
Thissum=0;
temp=j+1;
count++;
}
}
if(count==Num){
Maxsum=0;
m=0;
n=Num-1;
}
printf("%d %d %d",Maxsum,a[m],a[n]);
return 0;
}