题目:
算法思想:
思路:不用考虑每一步跳跃到那个位置,而是尽可能的跳跃到最远的位置,看最多能覆盖的位置,不断更新能覆盖的距离。
复杂度:时间复杂度O(n),遍历一边。空间复杂度O(1)
代码:
class Solution {
public boolean canJump(int[] nums) {
if (nums.length == 1) {
return true;
}
int cover = nums[0];
for (int i = 0; i <= cover; i++) {
cover = Math.max(cover, i + nums[i]);//当前覆盖距离cover和当前位置加能跳跃的距离中取一个较大者
if (cover >= nums.length - 1) {
return true;//覆盖距离超过或等于nums.length - 1 说明能到达终点
}
}
return false;
}
}