【 每天学习一点算法 2026/03/30】跳跃游戏

每天学习一点算法 2026/03/30

题目:跳跃游戏

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

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

我们设 dp[i] 表示当经过当前这个位置最多能走多少

那么以 dp[i] 其实就是 dp[i - 1] - 1 (因为 dp[i] 本身就领先一步)和 nums[i] 中的较大的值

nums = [2, 3, 1, 1, 4] 为例

dp[0] = num[0] = 2

dp[1] = Math.max(dp[0] - 1, num[1]) = 3

dp[2] = Math.max(dp[1] - 1, num[2]) = 2

dp[3] = Math.max(dp[2] - 1, num[3]) = 1

dp[4] = Math.max(dp[3] - 1, num[4]) = 4 (这一步可以不做)

只要 dp[i] 都是大于 0 的就一定能走到最后一个下标处

typescript 复制代码
function canJump(nums: number[]): boolean {
  if (nums.length === 1) return true
  let preDp = 0 // 记录上一个位置的 dp 初始为 0
  for (let i = 0; i < nums.length - 1; i++) {
    preDp = Math.max(preDp - 1, nums[i]) // 计算当前dp
    if (preDp === 0) return false // 无法继续前进
    if (i + preDp >= nums.length - 1) return true // 当前位置 + 最大前进步数超过最后下标就不用继续计算了
  }
};

题目来源:力扣(LeetCode)

相关推荐
Lufeidata2 小时前
go语言学习记录-入门阶段
前端·学习·golang
wuweijianlove2 小时前
算法性能预测的统计模型与参数敏感性分析的技术6
算法
Just right2 小时前
重学算法 数组 LC27移除元素
数据结构·算法
郝学胜-神的一滴2 小时前
巧解括号序列分解问题:栈思想的轻量实现
开发语言·数据结构·c++·算法·面试
计算机安禾2 小时前
【数据结构与算法】第15篇:队列(二):链式队列的实现与应用
c语言·开发语言·数据结构·c++·学习·算法·visual studio
丝斯20112 小时前
AI学习笔记整理(78)——Python学习7
人工智能·笔记·学习
唯_ww3 小时前
COMSOL学习笔记(一)曲线图数据导出及画图
笔记·学习
算法鑫探3 小时前
C语言密码验证:3次机会解锁
c语言·数据结构·算法·新人首发