0045. Jump Game II
https://leetcode.com/problems/jump-game-ii
Description
Given an array of non-negative integers nums
, 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.
You can assume that you can always reach the last index.
Example 1:
**Input:** nums = [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.
Example 2:
**Input:** nums = [2,3,0,1,4]
**Output:** 2
Constraints:
1 <= nums.length <= 104
0 <= nums[i] <= 1000
ac
class Solution {
public int jump(int[] nums) {
// edge cases
if (nums.length == 1) return 0;
int step = 0, currEnd = 0, currFarthest = 0, n = nums.length;
for (int i = 0; i < n; i++) {
currFarthest = Math.max(currFarthest, i + nums[i]); // how far we can reach at current step
if (currFarthest >= n-1) return step+1; // we hit the end
if (i == currEnd) { // we can at most reach here at current step, need one more jump
currEnd = currFarthest;
step++;
}
}
return -1;
}
}
This is an implicit bfs solution. i == curEnd means you visited all the items on the current level. Incrementing jumps++ is like incrementing the level you are on. And curEnd = curFarthest is like getting the queue size (level size) for the next level you are traversing.
Last updated
Was this helpful?