题目描述:给定n(1<=n<=100)个数,从中找出尽可能多的数,使得他们能够组成一个等差数列.求最长的等差数列的长度,每个数的绝对值不超过10000000.
样例:
输入数组为:2,8,3,5,6,4
输出为:5
Java代码实现:
import java.util.*;
public class Main {
public static int maxlength(int a[]){
int n=a.length;
int large=0; //记录最大长度
Arrays.sort(a); //将数组排序
if ((a[0]==a[n-1])) return n; //如果最小值和最大值相等,说明整个序列是公差为0的等差序列,直接返回总长度
for (int i=0;i<n;i++) //从头开始枚举
{
for (int j=i+1;j<n;j++)
{
int now=j;
int ans=2; //存储本次最长等差序列
int gc=a[j]-a[i]; //存储公差
for (int k=j+1;k<n;k++)
{
if ( (a[k]-a[now])==gc)
{
ans=ans+1;
now=k;
}
if(a[k]-gc>a[now]) break; //如果连续两项的差大于公差,结束本次查找
}
if(large<ans)large=ans; //更新本次最长长度
}
}
return large; //返回最长等差序列长度
}
public static void main(String[] args) {
int[] a={2,8,3,5,6,4};
System.out.print("整数序列为:");
for(int i=0;i<a.length;i++)
System.out.print(a[i]);
System.out.println();
System.out.println("最长等差数列长度为:"+maxlength(a));
}
}
输出结果为:
整数序列为:283564
最长等差数列长度为:5