【题目】
给定arr数组,arr[i]=k表示从位置i最多可以向右跳k个位置。
如果从位置0出发,返回最少跳几次能跳到arr最后的位置上。
【例子】
arr=[3,2,3,1,1,4],
arr[0]=3,选择跳到位置2,
arr[2]=3,可以跳到最后的位置,
所以返回2,即跳两次
【代码】
public static void main(String[] args) {
System.out.println(jump(new int[]{3,2,3,1,1,4}));//2
}
//跳跃问题
public static int jump(int[] arr){
if(arr==null||arr.length==0){
return 0;
}
int jump=0;//目前跳了多少步
int cur=0;//直跳jump步,最远到达的位置
int next=0;//再多跳一步,最远到达的位置
for(int i=0;i<arr.length;i++){
if(cur<i){//跳jump步不能到达位置I
jump++;//要多跳一步
cur=next;//更新最远位置
}
next=Math.max(next, i+arr[i]);
}
return jump;
}
【说明】
从左遍历arr,假设遍历到位置i
1)如果cur>=i,说明跳Jump可以到达位置i,此时不需要做什么
2)如果cur