JAVA解法
class Solution {
public int jump(int[] nums) {
// 对传进来的数组进行判空
if (nums == null || nums.length == 0 || nums.length == 1) {
return 0;
}
//记录跳跃的次数
int count = 0;
//当前的覆盖最大区域
int curDistance = 0;
//最大的覆盖区域
int maxDistance = 0;
for (int i = 0; i < nums.length; i++) {
//在可覆盖区域内更新最大的覆盖区域
maxDistance = Math.max(maxDistance,i + nums[i]);
//说明当前一步,再跳一步就到达了末尾
if (maxDistance >= nums.length - 1){
count++;
break;
}
//走到当前覆盖的最大区域时,更新下一步可达的最大区域
if (i == curDistance){
curDistance = maxDistance;
count++;
}
}
// 返回最终结果
return count;
}
}
题解分析
首先对传进来的数组进行判空,若不为空则继续。分别定义记录跳跃的次数、记录当前的覆盖最大区域和最大的覆盖区域三个变量。对数组进行遍历,求出在可覆盖区域内更新最大的覆盖区域,若最大的覆盖区域大于等于数组最后一个的位置则证明再跳一步就到达了末尾,则只需要走到走到当前覆盖的最大区域,下一步就到末尾,因此到了这一步后步数加一即为所求。
leetcode原题:45. 跳跃游戏 II
评论区