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

相关推荐
从琳开始9892 分钟前
优选算法——双指针(算法原理+力扣题)
算法·leetcode·职场和发展
从琳开始9894 分钟前
优选算法——滑动窗口(概念+解题模板+LeetCode例题讲解)
算法·leetcode·职场和发展
Nil2086 分钟前
leetcode 94二叉树的中序遍历
算法·leetcode·职场和发展
不会就选b9 分钟前
算法日常・每日刷题
算法
MartinYeung514 分钟前
[论文学习]δ-STEAL:基于本地差分隐私的大语言模型窃取攻击
网络·学习·语言模型
一只小小的芙厨16 分钟前
最短路总结
数据结构·算法
paopaokaka_luck20 分钟前
基于springboot3+vue3的文山民族文化资源展示与推广平台(协同过滤算法、Echarts 图形化分析)
java·前端·spring boot·学习·echarts
致Great23 分钟前
OpenAI 又把 Codex 往前推了一步: 以后做 Agent,没必要都造一个聊天框
算法
aqiu1111112 小时前
【算法刷题】蓝桥杯/AtCoder:删除元素后的中位数问题(Symmetry / Median)
算法·蓝桥杯·排序·中位数
wuhuhuan2 小时前
【JMeter 学习打卡 Day 4】多用户登录 + 动态 token 关联
学习·jmeter