You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找数组中最长的等差数列子数组?现有Python代码报错求修复

问题排查与修复

原代码存在的核心问题

  • 循环索引越界:循环内访问了i+2,但循环终止条件设为len(lst)-1,当i取到倒数第二个值时会触发索引溢出,正确终止值应为len(lst)-2
  • 计数逻辑错误:无差值变化时的计数重置逻辑,起始位置记录逻辑完全错误
  • 返回语句位置错误:return放在了for循环内部,第一次循环执行完就直接返回结果,没有遍历完全数组
  • 列表切片语法错误:列表切片使用圆括号(),正确应为方括号[],且切片起止位置计算逻辑缺失
  • 变量命名冲突:使用Python内置函数max作为变量名,会覆盖内置方法引发潜在问题
  • 测试用例输入错误:测试传入的数组第一个元素写为12,和你给出的示例数组第一个元素2不符

修复后可运行代码

def find_arithmetic(lst):
    n = len(lst)
    # 长度小于3的数组本身就是最长等差数列
    if n < 3:
        return lst
    max_len = 2
    current_len = 2
    start = 0
    best_start = 0
    current_diff = lst[1] - lst[0]
    
    for i in range(2, n):
        diff = lst[i] - lst[i-1]
        if diff == current_diff:
            current_len += 1
        else:
            current_diff = diff
            current_len = 2
            start = i - 1
        # 更新最长序列的起始位置和长度
        if current_len > max_len:
            max_len = current_len
            best_start = start
    return lst[best_start: best_start + max_len]

# 传入示例数组测试
print(find_arithmetic([2, 33, 54, 3, 7, 11, 15, 13, 11, 9, 7, 5, 10, 15, 20, 25]))

运行输出

[15, 13, 11, 9, 7, 5],和预期结果完全一致。

内容的提问来源于stack exchange,提问作者Ramadan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:36:03