package book.digui;
/**
* 跳跃游戏
* @author airycide
* 给定的一个数组arr,arr[i] == k,代表可以从位置i向右跳1~k个距离,比如:arr[2] = 3,
* 代表从位置2的位置可以跳到位置3,位置4,位置5,如果从位置0出发返回最少跳几次能跳到arr最后的位置上
* 举例说明:arr=[3,2,3,1,1,4]
* arr[0] == 3,选择跳到位置2,arr[2] == 3,可以跳到最后的位置,所以返回2.
*
*
*/
public class Main1 {
public static void main(String[] args) {
int [] arr = {3,2,3,1,1,4};
System.out.println(jump(arr));
}
public static int jump(int [] arr){
if (arr == null || arr.length == 0) {
return 0;
}else{
int jump = 0;
int cur = 0;
int next = 0;
for (int i=0;i<arr.length;i++) {
if (cur < i) {
jump++;
cur = next;
}
next = Math.max(next, i+arr[i]);
}
return jump;
}
}
}
/**
* 整型变量jump:代表目前跳了多少步。
* 整型变量cur:代表如果只能跳jump步,最远能够到达的位置。
* 整型变量next:如果再多跳一步,最远能够到达的位置。
* 初始化:jump = 0,cur = 0;next = 0.
* 2:从左到右遍历arr,假设遍历到i这个位置。
* 如果cur>=i,说明jump步可以到达位置i,此时什么也不做。
* 如果cur<i,说明只跳jump步不能到达位置i,需要多一步才行,此时令jump++,cur = next,表示多跳了一步,cur更新成跳jump+1步能够到达的位置,即next。
* 将next更新成math.max(next,i+arr[i]),表示下一次多跳一步到达的最远的位置。
* 返回最终jump就行。
*
*
*
*
*
*
*
*/