Comment on page

45. Jump Game II

Medium
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:
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

解題

func jump(nums []int) int {
dp := make([]int, len(nums))
dp[len(nums) - 1] = 0
for i := len(nums) - 2; i >= 0; i-- {
res := len(nums)
for j := 1; j <= nums[i]; j++ {
curIdx := i+j
if curIdx < len(nums) && 1 + dp[curIdx] < res{
res = 1+dp[curIdx]
}
}
dp[i] = res
}
return dp[0]
}