原题链接在这里: https://leetcode.com/problems/jump-game-ii/
这是的Jump Game进阶版题目。求能跳到最后一个元素的最小步数。
采用了Jump Game中的Method 2. maxJump是维护的当前能跳到的最大位置,maxReach是指从之前的点能reach到得最远位置。
当i 大于之前点能碰到的最大位置时,就需要跳一步,并把maxReach更新为maxJump.
最后返回若是maxJump能到最后一个元素,就返回step, 若是到不了,就说明根本走不到最后一步,返回0.
AC Java:
1 public class Solution { 2 public int jump(int[] nums) { 3 if(nums == null || nums.length == 0){ 4 return 0; 5 } 6 int maxJump = 0; 7 int maxReach = 0; 8 int step = 0; 9 for(int i = 0; i< nums.length && i<=maxJump; i++){ 10 if(i>maxReach){ 11 step++; 12 maxReach = maxJump; 13 } 14 maxJump = Math.max(maxJump, nums[i] + i); 15 } 16 return maxJump<nums.length-1 ? 0:step; 17 } 18 }
原文:http://www.cnblogs.com/Dylan-Java-NYC/p/4834079.html