1、数组跳跃
问题说明:给定一个数组A,A[i]==k可以表示从位置i向后跳1~k个距离。比如A[2]==3代表从下标为2的位置跳到位置3、或者4、或者5。问:从位置0出发,最少跳几次跳到最后的位置?
样例:输入:A=[3,1,4,2,2,8]
输出:2
******************************************************思考一下************************************************************
解答:
思路:依次遍历数组,从零开始跳跃,跳跃次数设为J=0,同时找到可以跳跃到的最大位置M,如果最大位置M大于最后的下标即A.length则结束,否则继续跳跃,跳跃数加一。
java实现:
public class JumpGame14 {
public int jump(int[] A ){
if(A==null||A.length==0){
return 0;
}
int jump=0;
int M=0;
int next=0;
for(int i=0;i<A.length;i++){
if(M<i){
jump++;
M=next;
}
next=Math.max(next, i+A[i]);
System.out.print("当前可以达到最大位置M:"+M+" ");
System.out.print("下一个位置:"+next+" ");
System.out.println("跳跃数"+jump);
System.out.println("************************");
}
return jump;
}
public static void main(String[] args) {
int[] arr={1,4,1,2,3,1,4};
JumpGame14 j=new JumpGame14();
int k=j.jump(arr);
System.out.println(k);
}
运行结果:
当前可以达到最大位置M:0 下一个位置:1 跳跃数0
************************
当前可以达到最大位置M:1 下一个位置:5 跳跃数1
************************
当前可以达到最大位置M:5 下一个位置:5 跳跃数2
************************
当前可以达到最大位置M:5 下一个位置:5 跳跃数2
************************
当前可以达到最大位置M:5 下一个位置:7 跳跃数2
************************
当前可以达到最大位置M:5 下一个位置:7 跳跃数2
************************
当前可以达到最大位置M:7 下一个位置:10 跳跃数3
************************
3