1.题目描述

2.思路
每次尽可能往远一点跳,就能以最少的步数达到终点。
以最少的步数尽可能的增加覆盖范围,只要覆盖范围把最远的终点覆盖掉,就说明当前的步数可以跳到终点。
每次只记录下一步的最大范围。


3.代码实现
java
public class H45 {
public int jump(int[] nums) {
if(nums.length==1)//如果只有1一个元素,说明不用跳(既是终点也是起点)
return 0;
int cur=0;//当前的覆盖范围的索引,从0开始
int next=0;//下一步的覆盖范围
int res=0;//记录当前的结果
for(int i=0;i<nums.length;i++)
{
next=Math.max(i+nums[i],next);//两两比较,每次保存值最大的那个数,并赋值给next
if(i==cur) {//当前一步的跳跃范围是否已经用完了
//当前的位置不是数组的终点位置
if (cur != nums.length - 1)
{
res++;//还没到终点位置,结果(步数)+1
//把下一步的覆盖范围赋值给当前的复制范围
cur=next;
if(cur>nums.length-1)
break;
}else {
break;
}
}
}
return res;
}
public static void main(String[] args)
{
H45 test=new H45();
int[] nums={2,3,1,1,4};
int ans=test.jump(nums);
System.out.print(ans);
}
}