1、题目描述
给出一个非负整数数组,你最初定位在数组的第一个位置。
数组中的每个元素代表你在那个位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
样例
给出数组A = [2,3,1,1,4],最少到达数组最后一个位置的跳跃次数是2(从数组下标0跳一步到数组下标1,然后跳3步到数组的最后一个位置,一共跳跃2次)
2、思想
3、代码实现
利用贪心策略,用两个变量i和temp标识当前的位置和下一步能跳到的最远距离。
class Solution {
public int jump(int[] A) {
if(A.length<=1){
return 0;
}
int i=0;//当前所跳的长度
int j=0;
int count = 0;//需要走的步数
while(i<A.length){
if(i+A[i]>=A.length-1){
count++;
return count;
}
int temp = Integer.MIN_VALUE;////下一步所能跳到的最远距离
for(int k=i+1;k<=i+A[i];k++){
if(temp<k+A[k]){
temp=k+A[k];
j=k;
}
}
i=j;//确定从当前位置要跳到哪里,使当前跳跃和下一次跳跃和的效果是最大的
count++;
}
return 0;
}
}