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

如何获取无相邻元素最大和的对应索引?现有代码存索引匹配问题

如何获取无相邻元素最大和的对应索引

你的代码问题出在:当数组存在重复值时,a.index(x)只会返回该值第一次出现的索引,无法对应到实际被选中的那个元素的位置。根本原因是你的DP数组存储的是元素值序列,而非索引序列,导致后续无法追踪具体来源。

解决方案

修改DP数组,让它存储索引序列而非元素值。递归过程中直接记录选中的索引,最后就能直接得到正确的结果,无需反向查找。

修改后的代码

import random

numsLength = random.randint(1, 100)
a = [random.randint(0, 400) for i in range(numsLength)]
# DP数组改为存储索引列表,而非元素值列表
DP = [[] for _ in a]  

def solveDP(i):
    if i >= len(a):
        return []
    
    if len(DP[i]) > 0:
        return DP[i]
    
    # 选当前元素,记录其索引,然后跳转到i+2
    arr1 = [i] + solveDP(i + 2)
    # 不选当前元素,跳转到i+1
    arr2 = solveDP(i + 1)
    
    # 通过索引计算对应序列的和
    sum1 = sum(a[idx] for idx in arr1)
    sum2 = sum(a[idx] for idx in arr2)
    
    if sum1 > sum2:
        DP[i] = arr1[:]
    else:
        DP[i] = arr2[:]
    return DP[i]

# 得到选中的索引列表(从0开始)
selected_indices = solveDP(0)
# 转换为你需要的从1开始的编号
mineNum = [idx + 1 for idx in selected_indices]

# 验证输出(可选)
print("原数组:", a)
print("选中的元素值:", [a[idx] for idx in selected_indices])
print("选中的索引(从1开始):", mineNum)

关键改动说明

  1. DP数组存储索引:不再存储元素值,直接记录选中的索引位置,从根源避免重复值的索引混淆问题。
  2. 递归操作索引:递归时直接传递索引,而非元素值,确保每一步都能追踪到具体位置。
  3. 通过索引计算和:比较序列和时,通过索引去原数组中取值计算,逻辑更准确。
  4. 直接得到结果:最终selected_indices就是实际选中元素的索引,直接转换为从1开始的编号即可,无需再用index()方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:33:33