标签:
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Your goal is to reach the last index in the minimum number of jumps.
For example:
Given array A = [2,3,1,1,4]
The minimum number of jumps to reach the last index is 2
. (Jump 1
step from index 0 to 1, then 3
steps to the last index.)
在Jump game中,只要求判断能否到达终点,本题要求达到终点的最小跳跃数。
思路:贪心策略
1. 计算经过k次跳跃后,最远能到达的位置maxReach;
2. 如果当前位置current>maxReach,说明k次跳跃已经不够到达当前位置,则k=k+1,即多一次跳跃;
3. 更新maxReach,方法是从之前遍历过的位置中找到1次跳跃能达到的最远位置onceJumpMaxReach。
4. 什么时候无法达到终点?如果current > onceJumpMaxReach;说明无法达到终点。
代码如下:
public int jump(int[] nums) { if(nums == null || nums.length < 2) return 0; int onceJumpMaxReach = nums[0];//一次跳跃最远能达到的位置 int maxReach = nums[0];//经过minJumps跳跃后最远达到的位置 int minJumps = 1;//最小跳跃次数 for(int i=0; i<nums.length; i++) { if(i > maxReach) { minJumps++; maxReach = onceJumpMaxReach; } onceJumpMaxReach = Math.max(onceJumpMaxReach, nums[i] + i); } return minJumps; }
标签:
原文地址:http://www.cnblogs.com/linxiong/p/4496716.html