【 每天学习一点算法 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)

相关推荐
小饕11 分钟前
RAG学习之- RAG 数据导入完整指南
人工智能·python·学习
王老师青少年编程14 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:魔法
c++·算法·贪心·csp·信奥赛·排序贪心·魔法
wearegogog12315 分钟前
基于和差波束法的单脉冲测角MATLAB实现
人工智能·算法·matlab
AI科技星23 分钟前
灵魂商数(SQ) · 全域数学统一定义【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
晓觉儿24 分钟前
【GPLT】2026年第十一届团队程序设计天梯赛赛后题解(已写2h,存档中)
数据结构·c++·算法·深度优先·图论
We་ct30 分钟前
LeetCode 322. 零钱兑换:动态规划入门实战
前端·算法·leetcode·typescript·动态规划
cyr___38 分钟前
Unity教程(二十六)技能系统 黑洞技能(上)基础实现
学习·游戏·unity·游戏引擎
星幻元宇VR43 分钟前
VR党建蛋椅|以沉浸式体验推动党建学习方式创新
科技·学习·安全·vr·虚拟现实
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 394. 字符串解码 | C++ 单栈回压法
c++·算法·leetcode
穿条秋裤到处跑1 小时前
每日一道leetcode(2026.04.22):距离字典两次编辑以内的单词
算法·leetcode