[leetcode]45. Jump Game II青蛙跳(跳到终点最小步数)

时间:2021-12-01 18:44:50

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.

Input: [2,3,1,1,4]
Output: 2
Explanation: 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.

题意:

跟之前[leetcode]55. Jump Game青蛙跳(能否跳到终点)思路一致。

不同的是,

要求计算最小步数。

思路:

一、初始化lastReachIdx, 指针i, lastReachIdx, result都为0

[leetcode]45. Jump Game II青蛙跳(跳到终点最小步数)

二、更新curReachIdx(即当前i的*范围)

[leetcode]45. Jump Game II青蛙跳(跳到终点最小步数)

三、指针i继续扫数组,当前指针i若大于lastReachIdx

[leetcode]45. Jump Game II青蛙跳(跳到终点最小步数)

四、则更新lastReachIdx, 同时result ++。 而curReachIdx更新为当前i对应的*范围

[leetcode]45. Jump Game II青蛙跳(跳到终点最小步数)

五、指针i继续扫数组,当前指针i 若大于lastReachIdx,

[leetcode]45. Jump Game II青蛙跳(跳到终点最小步数)

则说明又要更新lastReachIdx并且result ++了。

代码:

 public class JumpGameII {
public int jump(int[] nums) {
int result = 0;
int lastMaxIdx = 0;
int curMaxIdx = 0;
for (int i = 0; i < nums.length; ++i) {
if (i > lastMaxIdx) {
lastMaxIdx = curMaxIdx;
++result;
}
curMaxIdx = Math.max(curMaxIdx, i + nums[i]);
}
return result;
}
}