题目描述
给定一个非负整数数组 nums
,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
求解思路
- 创建变量 coverage 用来保存所能跳到的最远的距离;
- 遍历数组nums,考虑 coverage 大于nums数组的最后一个位置,则认为可以跳到这个位置,返回True,否则返回False;
- 关于遍历过程中,i 的遍历范围是 0—coverage,因为在这个过程中 coverage 是一直被更新的,而且 数组中的每个元素代表在该位置可以跳跃的最大长度(也就是说也能比这个数跳的少,这个跳跃的数并不是绝对的),因此动态维护 coverage 就行,只需要遍历0—coverage 范围内的 i 就行。
输入输出示例
代码
class Solution {
public boolean canJump(int[] nums) {
int n = nums.length;
if(n == 1) return true;
int coverage = 0;
for(int i = 0; i <= coverage; i++){
coverage = Math.max(coverage,i + nums[i]);
if(coverage >= n - 1){
return true;
}
}
return false;
}
}