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就行。 * * * * * * * */