如何查找数组中最长的等差数列子数组?现有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
相关产品推荐
相关产品推荐

