一组递增的数组,如何得到其中公差为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,请问我要如何改进?
谢谢!
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)
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) # 等差数组的最大长度