资讯动态

【LeetCode: 跳跃游戏】贪心算法

发布时间:2026/10/10 4:06:15 来源:尧图企业网站定制
目 录一、题目描述二、题目解答2.1 思路2.2 代码三、总结一、题目描述给你一个非负整数数组nums你最初位于数组的第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标如果可以返回true否则返回false。示例 1输入nums [2,3,1,1,4]输出true解释可以先跳 1 步从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2输入nums [3,2,1,0,4]输出false解释无论怎样总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 所以永远不可能到达最后一个下标。二、题目解答2.1 思路最开始一看到题目就直接简单的想这不就遍历数组遇到 0 就返回 false 就好了啊。但结果emm也是大错特错了。因为如果 0 前面的数字可以直接越过 0 呢那不也能跳过去所以我们要考虑到当前元素能跳跃到最远的元素下标为多少。思路1. 定义一个变量 maxJump表示当前能达到的最远下标初始值为 02. 遍历数组若 i maxJump就说明该元素连当前位置都到达不了所以直接返回false否则就更新 maxJump 的值最后对 maxJump 与数组最后一个元素下标比较若大于等于就返回 true3. 遍历结束返回 true接下来想说一下这个 maxJump 的值该怎样更新我们知道 maxJump 表示的是最远下标那么当我们更新 maxJump 时就不能只是把 nums[i] 和当前 maxJump 它俩之间取最大值我们应该加上当前元素的下标因为是从当前元素开始跳的如果不加的话都默认是从 0 开始跳的了我觉得这是一个很容易落下的点。2.2 代码class Solution { public boolean canJump(int[] nums) { int maxJump 0; int n nums.length; for(int i 0; i n; i){ if(i maxJump){ return false; }else{ maxJump Math.max(i nums[i],maxJump); } if(maxJump n-1){ return true; } } return true; } }三、总结今天通过这道题学到了看见题目不能想的太简单了有好多小点容易忽略

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑