如何找出数组中的最长等差数列

一组递增的数组,如何得到其中公差为10的等差数列最长长度?
例如:输入:[1,2,10,11,15,20,21,30,40]
输出应为4,因为最长的公差为10的等差数列[10,20,30,40]长度为4。
我的python代码:
df = [1,2,10,11,15,20,21,30,40]
i=0
common_differene=10
df_len=len(df)
for position_1 in range(df_len):
for position_2 in range(df_len):
if df[position_1] + common_differene == df[position_2]:
position_1=position_2
i=i+1
print(i)

输出结果为9而不是4,请问我要如何改进?
谢谢!

1. 循环找出所有公差为10的等差数列

2. 以等差数列列表长度排序

3. 获取最长数列的长度


df = [1,2,10,11,15,20,21,30,40]
common_differene = 10
# 存储所有【公差为10的等差数列】的字典
dst = {}
# 查找下一个值是否在列表中
def check_value(value, list):
  prev_value = value + common_differene
  if prev_value in df:
    list.append(prev_value)
    check_value(prev_value, list)
    
# 循环找出所有公差为10的等差数列
for value in df:
  dst[value] = [value]
  check_value(value, dst[value])
print(dst)

# 以等差数列列表长度排序
lens = sorted(dst.items(), key=lambda x: len(x[1]), reverse=True)
print(lens)
# 获取最长数列的长度
max_len = len(lens[0][1])
print(max_len)

img


nums = [1, 2, 10, 11, 15, 20, 21, 30, 40]

diff_max = nums[len(nums) - 1] - nums[0]

dp = [[0] * (diff_max + 1) for i in range(len(nums))]

for i in range(len(nums)):
    for j in range(diff_max):
        dp[i][j] = 1

longest_length = 1

for i in range(len(nums)):
    j = i - 1
    while j >= 0:
        temp = nums[i] - nums[j]
        dp[i][temp] = dp[j][temp] + 1
        longest_length = max(longest_length, dp[i][temp])
        j -= 1
print(longest_length)  # 等差数组的最大长度