例如:1 -2 3 -1 -5 -4 1 0 -2 5 -1
则a中相邻元素的最小和为(-1)+(-5)+(-4)+1+0+(-2)=-11.
问题要求:求一时间复杂度为O(n)算法.谢谢!
[此贴子已经被作者于2006-9-17 23:04:48编辑过]
/*是这样吗?太感谢你了,谢谢...*/
#include<stdio.h>
#define N 50
int Min(int a[],int n)
{
int i=1,min=0,f[N];
f[0]=a[0];
min=f[0];
while(i<n)
{
if(f[i-1]>0)
{
f[i]=a[i];
}
else
{
f[i]=a[i]+f[i-1];
}
if(f[i]<min)
{
min=f[i];
}
//printf("%d\n",f[i]);
i++;
}
return(min);
}
int main()
{
int a[N]={1,-2,3,-1,-5,-4,1,0,-2,5,-1};
printf("min=%d\n",Min(a,11));
return(0);
}
后来想到了.
#include<stdio.h>
#define N 50
int Min(int a[],int n)
{
int i=1,min=0,f;
f=a[0];
min=f;
while(i<n)
{
if(f>0)
{
f=a[i];
}
else
{
f=a[i]+f;
}
if(f<min)
{
min=f;
}
//printf("%d\n",f);
i++;
}
return(min);
}
int main()
{
int a[N]={1,-2,3,-1,-5,-4,1,0,-2,5,-1};
printf("min=%d\n",Min(a,11));
return(0);
}