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

相关推荐
sheeta19981 小时前
LeetCode 每日一题笔记 日期:2026.05.13 题目:1674. 使数组互补的最少操作次数
笔记·算法·leetcode
liulilittle1 小时前
TCP UCP v1.0:BBR 的非破坏性约束层
网络·c++·网络协议·tcp/ip·算法·c·通信
z200509301 小时前
【linux学习】linux的基本指令
linux·学习
每天回答3个问题1 小时前
LeetCodeHot100|回溯算法、46.全排列、78.子集、17.电话号码的字母组合
算法·深度优先·回溯
AOwhisky1 小时前
Docker 学习笔记:镜像分发、容器运行与资源限制
笔记·学习·docker
MediaTea2 小时前
人工智能通识课:机器学习之无监督学习
人工智能·深度学习·学习·机器学习
Liangwei Lin2 小时前
LeetCode 287. 寻找重复数
算法·leetcode·职场和发展
Fanfanaas3 小时前
2026 年 华中杯 数学建模竞赛 A 题 问题一个人解析
学习·数学建模
OCR_133716212753 小时前
护照OCR校验位技术解析:从算法逻辑到工程落地,筑牢证件核验安全线
人工智能·算法
Hello.Reader3 小时前
算法基础(十三)——随机算法为什么有时主动引入随机性
java·数据库·算法