当位于数组下标 i 时,所能到达的最远距离为 i + nums[ i ]; 遍历数组,维护最远可到达的距离forth,当最远距离 forth >= 数组最后一个元素的下标 ( nums.length - 1) 时,认为可以到达最后一个下标,返回true, 否则返回false;
class Solution {
public boolean canJump(int[] nums) {
//维护最远可到达的距离
int forth = 0;
for(int i = 0; i < nums.length; i++){
if(i <= forth){
forth = Math.max(forth, nums[i] + i);
if(forth >= nums.length - 1){
return true;
}
}
}
return false;
}
}
用 maxForth 来记录当前下标 i 所能到达的最远距离,用 forth 来记录选择某一下标为起跳点的跳跃边界,当到达跳跃边界时必须跳,故跳跃次数 count 加一, 且更新边界条件 forth ;
class Solution {
public int jump(int[] nums) {
int forth = 0; //边界
int count = 0; //最少的跳跃次数
int maxForth = 0; //最远可达距离
for(int i = 0; i < nums.length - 1; i++){
maxForth = Math.max(maxForth, nums[i] + i);
if(i == forth){
forth = maxForth;
count++;
}
}
return count;
}
}