45. Jump Game II
Description
描述:https://leetcode.com/problems/jump-game-ii/description/
题意:给定一维数组,数组中的值表示该位置能往后跳的最大位置,求达到最后一个位置需要跳的最小步数。
Solution: (Java)
class Solution {
public int jump(int[] nums) {
int step = 0;
int reach = 0;
int max = 0;
for (int i = 0; i < nums.length; i++) {
if (reach < i) {
step++;
reach = max;
if (max >= nums.length-1)
break;
}
max = Math.max(max, i+nums[i]);
}
return step;
}
}
思路
- 本题是 第55题 的扩展,思路是贪心算法,runtime 1ms,超越99.96%;
- 本题的3个关键变量:step,reach,max。step记录跳跃的步数,reach是经过step次跳跃之后能到达的最大范围,max是从0~nums[i](当前位置)中能达到的最大范围,如果reach不能达到当前位置,则跳跃次数加一。