m0_73581176 2022-10-27 07:13 采纳率: 100%
浏览 34
已结题

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

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

  • 写回答

2条回答 默认 最新

  • Rattenking Python领域优质创作者 2022-10-27 09:25
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月4日
  • 已采纳回答 10月27日
  • 创建了问题 10月27日

悬赏问题

  • ¥15 C语言设计一个简单的自动换档程序
  • ¥15 关于logstash转发日志时发生的部分内容丢失问题
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。