【贪心算法】Leetcode 55. 跳跃游戏
---------------🎈🎈55. 跳跃游戏 题目链接🎈🎈-------------------
解法1
关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。
⭐️每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围coverRange。
java
class Solution {
public boolean canJump(int[] nums) {
// 遍历数组,nums[i]代表当前可以覆盖到的最大范围coverRange,
// 在循环中不断的修改这个coverRange
// 之后在这个范围中遍历,最终看能否覆盖到最后一个下标
if(nums.length == 1) return true;
int coverRange = 0;
for(int i = 0; i <= coverRange; i++){
coverRange = Math.max(coverRange,nums[i]+i); //动态更新coverRange
if(coverRange >= nums.length-1) return true;
}
return false;
}
}
解法2
时间复杂度O(N)
空间复杂度O(N)
java