跳跃游戏

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就行。
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 */
原文地址:https://www.cnblogs.com/airycode/p/5804789.html