package com.lyf.dp;
/**
* Created by fangjiejie on 2017/4/15.
*/
public class SkipGame {
public static void main(String[] args) {
}
public int jump(int a[]){
int jump=0;//代表到达当前位置跳跃的最少步数
if(a.length==0||a==null){
return -1;
}
int cur=0;//代表上一次跳跃后能到达的最远的位置
int next=0;//记录下一次跳跃够到达的最远位置
for(int i=0;i<a.length;i++){
if(cur<i){//上一次的跳跃 不能到达当前位置时
jump++;//需要再跳一步
cur=next;//这次跳跃能到达的最远的位置
}
next=Math.max(next,i+a[i]);//更新下一次跳跃能够到达的最远的位置
}
return jump;
}
}
可以这样理解:
遍历当前这个位置时, cur代表 可以一步跳到这个位置的最前面那个位置 能跳跃到达的最远位置,next代表从当前位置或者跨越当前位置 一步跳跃能到达的最远的位置,cur和next之间的点 需要的跳跃步数都是一样的,所以只要更新第一个cur不能到达的位置即可
如图所示,根据举些数据来理解一下吧