You are given a 0-indexed array of integers nums of length n. You are initially positioned at nums[0]. Each element nums[i] represents the maximum length of a forward jump from index i. In other words, if you are at nums[i], you can jump to any nums[i + j] where 0 <= j <= nums[i] and i + j < n. Return the minimum number of jumps to reach nums[n - 1]. The test cases are generated such that you can reach nums[n - 1].
Example 1
Input: nums = [2,3,1,1,4]
Output: 2
Explanation: Jump from index 0 to index 1 (1 step), then from index 1 jump 3 steps to the last index. A single jump from index 0 can reach at most index 2, so 2 jumps is the minimum.
Example 2
Input: nums = [2,3,0,1,4]
Output: 2
Explanation: Jump from index 0 to index 1, then from index 1 jump 3 steps to index 4. That is 2 jumps.
Example 3
Input: nums = [1]
Output: 0
Explanation: You start at the last index, so no jumps are needed.
Think of the array as levels of a BFS: from the current jump's reachable range, look ahead to the farthest index any of those positions can reach. When you finish the current range, you must spend one jump to advance to that new farthest range.
Run checks all cases above. Submit evaluates all test cases.