2.连续的子数组和 最大值
如:
1 2 3 -4 -6 7 5 -100 -99
最大值为 子数组7 5 最大值12
#include <stdio.h>
/* 连续的子数组的最大值如:
1 2 3 -4 -6 7 5 -100 -99
最大值为 子数组7 5 最大值12
*/
#define N 8
int main (int argc, char *argv[])
{
int i, j, a[N], max, sum;
printf("Enter %d figures.\n", N);
/*给数组赋值*/
for(i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
max = a[0];//给max赋初值
for(i = 0; i < N; i++)//遍历数组
{
sum = a[i];
for(j = i+1; j < N ; j++)
{
sum+= a[j];
if( sum > max )
max = sum;
}
}
printf("max = %d\n", max);
return 0;
}
算法更新
max = a[0];
for(i=0;i<N;i++)
{
sum+=a[i];
if(sum>max)
{
max=sum;
}
if(sum<0)
{
sum=0;
}
}
/* 这个思路很巧妙,当连续的几个数和小于0时,则抛弃这几个数,然后从后面的数重新算它们的和*/