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

相关推荐
xys_6789 小时前
深挖数据结构:树和二叉树(上)
数据结构·算法
lazy H9 小时前
【计算机网络】第 2 篇:一条数据如何穿过网络?彻底理解数据封装与解封装
网络·经验分享·后端·学习·计算机网络
我命由我123459 小时前
软件工程概念 - 可插拔性
java·后端·学习·java-ee·系统架构·软件工程·学习方法
Interview Aid1129 小时前
Google SWE Intern VO 面经:两轮 Coding,Follow-up 考察 BFS 状态
算法
琳达爱分享10 小时前
从单机令牌桶到集群限流:一次配额超发的复盘
后端·算法
range10 小时前
带TTL的LRU缓存的实现-字节手撕-26/10/19
算法
糖果豆豆10 小时前
n log n 到底从哪来?排序下界、2-SAT 与 3-SAT、停机问题,卡的是同一件事
算法·架构
地平线开发者10 小时前
【玩转 征程6 算法工具链:PTQ 工具篇】hb_verifier
算法·自动驾驶
171320330计算机毕设编程10 小时前
计算机毕业设计 基于springboot+vue的在线观鸟视频播放网站 LW PPT
java·大数据·vue.js·spring boot·算法·课程设计
kkkkkkkkkk_Z10 小时前
新手自学嵌入式 | 学习日记:I2C总线协议、时序分析、读写流程与代码实现
学习