刷刷刷 Day 32 | 55. 跳跃游戏
55. 跳跃游戏
LeetCode题目要求
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
示例
输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
解题思路
经过跳跃分析,如下图都可以到达尾部:

而实际上要到达数组的终点,我们每次都以最大值来跳跃,且要把这个覆盖的范围不断的累加,直到覆盖数组长度,那么就满足条件
上代码
class Solution { public boolean canJump(int[] nums) { // 本题的跳跃从下标 0 开始跳跃,最大步骤就是 下标对应的值 // 当跳跃到的下标值为 0 且不是最后一个元素,那就失败了。 // 要想达到尾部,且保证最优,那么优先跳最大步骤,如果最大步无法到达,那么就会无法达到尾部 // 2 0 0 3 1 // 跳跃范围 int range = 0; int len = nums.length; for (int i = 0; i <= range; i++) { // 动态变更可覆盖的范围,在已覆盖的范围内与新的覆盖值对比,取大的 range = Math.max(range, i + nums[i]); if (range >= len - 1) { return true; } } return false; } }
重难点
循环范围是动态变化的
附:学习资料链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了