579 字
3 分钟
跳跃游戏

题目描述#

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

解题思路#

  1. 贪心策略
    • 维护当前可到达的最远位置 maxReach
    • 遍历数组,实时更新最大覆盖范围
  2. 实时决策
    • 若当前位置超过当前 maxReach 则失败
    • 若 maxReach 已覆盖终点则提前终止
  3. 边界处理
    • 空数组直接返回false
    • 单元素数组默认成功
  4. 动态更新
    • maxReach = max(maxReach, i + nums[i])
    • 仅需遍历到当前 maxReach 位置

关键洞察#

  1. 覆盖范围原理
    • 能否到达终点  ⇔ 最大覆盖范围是否包含终点
    • 无需考虑具体跳跃路径
  2. 贪心最优性
    • 局部最大覆盖保证全局可达性
    • 提前终止优化性能
  3. 位置依赖性
    • 当前位置可达性依赖于前一状态
    • 不可到达的位置立即失败
  4. 空间优化
    • 仅需单个变量存储覆盖范围
    • 避免使用额外数组存储状态

复杂度分析#

指标说明
时间复杂度O(n):最坏情况遍历整个数组
空间复杂度O(1):仅使用常数级别额外空间

代码实现#

const canJump = (nums) => {
if (nums.length === 0) return false;
if (nums.length === 1) return true;
let maxReach = 0;
for (let i = 0; i < nums.length; i++) {
// 当前位置已超出可达范围
if (i > maxReach) return false;
// 更新最远可达位置
maxReach = Math.max(maxReach, i + nums[i]);
// 已覆盖终点则提前终止
if (maxReach >= nums.length - 1) return true;
}
return false;
};

实际应用场景#

  1. 机器人路径规划:工业机器人臂的关节移动范围判断`
  2. 游戏AI导航:角色平台跳跃关卡的可达性分析`
  3. 网络路由优化:数据包在多跳网络中的最大传输距离`
  4. 供应链管理:货物在物流节点间的最大转运范围`

相似题目#

跳跃游戏
https://website-truelovings-projects.vercel.app/posts/algorithms/跳跃游戏/
作者
欢迎来到StarSky的网站!
发布于
2025-08-20
许可协议
CC BY-NC-SA 4.0