这个题目的答题思路和55那题很像,但是比他要难一点.
问题的核心思路就是,达到完全覆盖数组需要多少次,所以需要记录每次扩容
class Solution {
public int jump(int[] nums) {
if (nums == null || nums.length == 0 || nums.length == 1) {
return 0;
}
int step = 0;
//目前最大可覆盖区域
int maxCover = 0;
//当前这一步可覆盖的区域
int curCover = 0;
for (int i =0 ; i < nums.length ; i++){
maxCover = Math.max(maxCover,nums[i] + i);
//想了很久,maxcover大于数组最后一个位置的时候说明再跳一步就可以到终点了,maxcover这个点可能不是在最后一个点
if(maxCover >= nums.length-1){
step++;
break;
}
//不可修改,只有每次扩容才知道需要加一步数
if(i == curCover){
curCover = maxCover;
step++;
}
}
return step;
}
}
一天四题,反复复习