给定一个未排序的数组,找出其中最长的等差数列(注意:不需要保证数字的顺序)
输入:
N:数组中元素的个数,其中N<10000000
数组中各个元素:如1 4 2 5 3
输出:
等差序列长度:如上面数组输出的结果为 5
解题思路:
leetcode 1027题的思路,如https://blog.csdn.net/qq_32424059/article/details/89301300,或者https://www.jianshu.com/p/62d3d87495dd
需要注意的是我们这里不需要保证数字的顺序,那么我们可以把杂乱的数组的元素进行按照从大到小的方法进行排序(一定是从大到小,不然下面的代码差值存在负数)。那么首先我们上代码看看
二维DP, 用dp[i][d]表示以下标i结尾,公差为d的子序列的长度。
注意公差可能是负数,所以要+10001把它变正。
#coding:utf-8
import sys
#方法1
def longestArithSeqLength(n,N, A):
res = 1
dp = [[1] * n for j in range(N)]
for i in range(1, len(A)):
for j in range(