如何获取无相邻元素最大和的对应索引?现有代码存索引匹配问题
如何获取无相邻元素最大和的对应索引
你的代码问题出在:当数组存在重复值时,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)
关键改动说明
- DP数组存储索引:不再存储元素值,直接记录选中的索引位置,从根源避免重复值的索引混淆问题。
- 递归操作索引:递归时直接传递索引,而非元素值,确保每一步都能追踪到具体位置。
- 通过索引计算和:比较序列和时,通过索引去原数组中取值计算,逻辑更准确。
- 直接得到结果:最终
selected_indices就是实际选中元素的索引,直接转换为从1开始的编号即可,无需再用index()方法。
内容的提问来源于stack exchange,提问作者ForgivenProdigy
相关产品推荐
相关产品推荐

