给一个数组,元素都是整数(有正数也有负数),寻找连续的元素相加之和为最大的序列。
如:1、-2、3、5、-4、6 连续序列3、5、-4、6的和最大。
如元素全为负数,则最大的和为0,即一个也没有选。
#include <stdio.h>
int begin=0,end=0;
int find_max_sum(int a[], int n)
{
if(a == NULL || n <= 0)
return NULL;
int sum,max,i;
sum = max = a[0];
for(i=1;i<n;i++)
{
if(sum < 0)
{
sum = a[i];
begin = end = i;
}
else
{
sum += a[i];
end = i;
}
if(sum > max)
max = sum;
}
if(max < 0)
max = 0;
return max;
}
int main()
{
int a[] = {1,-2,3,5,-4,6};
int len = sizeof(a) / sizeof(int);
int i;
printf("序列为:\n");
for(i=0;i<len;++i)
printf("%d\t",a[i]);
printf("\n");
int max = find_max_sum(a,len);
printf("最大序列为:\n");
for(i=begin;i<=end;++i)
printf("%d\t",a[i]);
printf("\n");
printf("最大值为:%d\n",max);
return 0;
}
结果: