题目描述
给定n(1<=n<=400)个数,从中找出尽可能多的数使得他们能够组成一个等差数列.求最长的等差数列的长度.
输入要求
第一行是一个整数n,接下来一行包括了n个数,每个数的绝对值不超过10000000.
输出要求
对于每个输入数据,输出你所找出的最长等差数列的长度
假如输入
7 3 8 4 5 6 2 2
应当输出
5
分析:枚举法,n^3时间复杂度,另一种方法是dp,dp[j][i]表示以a[j]和a[i]结尾的最长等差数列的长度。枚举最后两个元素,对于每一个a[j]和a[i],都要找到a[p],p < j,满足a[p] + a[i] == 2 * a[j]。然后dp[p][j] + 1去更新dp[j][i]。看起来是三层循环,但其实对于同一个i,p的位置是随着j增大而增大的,所以最里面的while循环对于每个i值最多是O(n)的代价。总的代价还是O(n^2)。
枚举代码:
1 |
|
dp代码:
1 |
|