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

Python求解最长奇偶交替子序列代码索引错误原因排查

报错原因及代码问题梳理

索引错误的直接原因

你出现索引错误和j是否小于i没有任何关系,核心问题是sln数组没有初始化:

  • 你代码里定义sln = [],全程没有往里面添加任何元素,数组长度始终为0。当i=1进入内层循环要访问sln[i]也就是sln[1]的时候,空数组根本没有对应索引的元素,自然触发索引越界。

其他代码逻辑问题

除了初始化问题,你的代码还有多处不符合题目要求的错误:

  1. 动态规划初始值缺失
    这类问题中sln[i]通常表示以第i个元素结尾的最长奇偶交替子序列长度,初始值应该全为1,因为单个元素本身就是长度为1的合法子序列,需要在循环前补充sln = [1] * n。
  2. 奇偶交替判断逻辑错误
    当A[i]是奇数时,前一个元素需要是偶数才符合交替要求,你代码里写的是A[j]%2==1,完全不满足奇偶交替的条件。
  3. 多余的递增判断
    题目仅要求子序列奇偶交替,没有要求严格递增,你加的A[j] < A[i]属于额外限制,会导致结果错误。
  4. 计算结果未赋值
    else分支里的max(sln[i],sln[j]+1 )没有赋值给sln[i],计算结果直接丢弃,逻辑不生效。
  5. 返回值错误
    你直接返回sln列表,题目要求返回最长子序列的长度,应该返回max(sln)。

修正后参考代码

def solve(A):
    n = len(A)
    if n == 0:
        return 0
    sln = [1] * n
    for i in range(n):
        for j in range(i):
            # 只要奇偶不同就符合交替要求
            if A[i] % 2 != A[j] % 2:
                sln[i] = max(sln[i], sln[j] + 1)
    return max(sln)

A = [1, 2, 2, 5, 6]
print(solve(A)) # 输出5,对应合法子序列如[1,2,5,6]等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:39:00