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

求助:求解整数数组的出口方向判断算法难题

解决数组移动退出/循环问题的正确思路

这个问题的核心其实是跟踪已访问的索引——死循环的本质就是重复踏入同一个索引,而退出的判断则是看移动后的索引是否超出数组边界。你之前的“全正数”思路确实太局限了,咱们来一步步拆解正确的解法:

核心逻辑梳理

先明确三种结果的判定条件:

  • 右侧退出:移动后的索引 ≥ 数组长度
  • 左侧退出:移动后的索引 < 0
  • 死循环:回到了已经访问过的索引(意味着会无限重复当前路径)

具体算法步骤

  1. 用一个集合(或者标记数组)记录已经走过的索引,避免重复判断
  2. 从索引0开始,循环执行以下操作:
    • 如果当前索引已经在访问集合里,直接判定为死循环
    • 将当前索引加入访问集合
    • 计算下一个索引:当前索引 + 当前索引对应的数组值
    • 检查下一个索引的状态:
      • 若小于0 → 返回左侧退出
      • 若大于等于数组长度 → 返回右侧退出
      • 否则,将当前索引更新为下一个索引,继续循环

结合示例验证

拿你给出的例子走一遍流程,更直观:

  • 示例[2,0,-1]:
    1. 初始索引0 → 加入集合,计算0+2=2
    2. 索引2 → 加入集合,计算2+(-1)=1
    3. 索引1 → 加入集合,计算1+0=1 → 1已经在集合里,判定死循环
  • 示例[1,-2]:
    1. 索引0 → 加入集合,计算0+1=1
    2. 索引1 → 加入集合,计算1+(-2)=-1 <0 → 判定左侧退出

代码实现(Python)

def judge_move_result(nums):
    visited = set()
    current_idx = 0
    arr_length = len(nums)
    
    while current_idx not in visited:
        # 标记当前索引已访问
        visited.add(current_idx)
        # 计算下一个位置
        next_idx = current_idx + nums[current_idx]
        
        # 检查是否触发退出条件
        if next_idx < 0:
            return "从左侧退出"
        if next_idx >= arr_length:
            return "从右侧退出"
        
        # 更新当前索引,继续循环
        current_idx = next_idx
    
    # 走到这里说明回到了已访问的索引,陷入死循环
    return "陷入死循环"

测试你的所有示例:

print(judge_move_result([1,1,1]))  # 输出:从右侧退出
print(judge_move_result([1,-2]))   # 输出:从左侧退出
print(judge_move_result([2,0,-1])) # 输出:陷入死循环
print(judge_move_result([2,5,1,-2,0])) # 输出:从右侧退出

这个解法能覆盖所有场景,不管数组里是正、负还是0,都能准确判断结果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:26:06