找最长等差数列的长度

题目描述:给定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 }
View Code

输出结果为:

整数序列为:283564
最长等差数列长度为:5

原文地址:https://www.cnblogs.com/guozhenqiang/p/5426079.html