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