题目描述:
标签:贪心算法 数组
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
代码:
思路分析:
1、定义一个当前覆盖范围curDis=0,和下一步覆盖范围nextDis=0。
2、从i=0的位置开始遍历数组,计算下一步覆盖的范围i+nums[i]
①如果i==curDis(这个条件主要是为了在当前覆盖范围内先找到下一步覆盖的最大范围)
如果不满足,则在当前覆盖范围内找下一步最大覆盖范围
如果满足,首先判断当前覆盖范围是否!=nums.length -1
如果不满足,则跳出循环
如果满足,则跳跃的步数ans++,同时将下一步覆盖范围赋予当前覆盖范围,判断下一步覆盖范围是否>=nums.length -1,满足则跳出循环
class Solution {
public int jump(int[] nums) {
if(nums.length == 1){
return 0;
}
int nextDis = 0;
int curDis = 0;
int ans = 0;
for(int i = 0;i < nums.length;i++){
nextDis = Math.max(i+nums[i],nextDis);
if(i == curDis){
if(curDis != nums.length - 1){
ans++;
curDis = nextDis;
if(nextDis >= nums.length - 1){
break;
}
}else{
break;
}
}
}
return ans;
}
}