题目:
求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大:
如果没有符合条件的就输出
格式:
输入[1,3,0,5,-1,6]
输出[-1,1,3,5]
要求时间复杂度,空间复杂度尽量小。
分析:首先对数组进行排序,然后在进行查找。
代码:
void longMin(int *a,int n)
{
if(n<=1)
return;
int len=0;
int max=0;
int begin=0;
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
int diff=a[j]-a[i];
int next=diff+a[j];
int k=j+1;
int len1=2;
for( ;k<n;k++)
if(next==a[k])
{
len1++;
next=next+diff;
}
if(len1>=3&&len1>len)
{
len=len1;
max=diff;
begin=i;
}
}
}
if(len>=3)
{
printf("[%d\t",a[begin]);
int f=a[begin];
for(int m=1;m<len;m++)
{
f=f+max;
printf("%d\t",f);
}
printf("]\n");
}
else
printf("No\n");
}