45.Jump Game II === ###### tags: `Medium`,`Array`,`DP`,`Greedy` [45. Jump Game II](https://leetcode.com/problems/jump-game-ii/) ### 題目描述 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` <= 10^4^ * 0 <= `nums[i]` <= 1000 ### 解答 #### Javascript ```javascript= function jump(nums) { let max = 0; let jump = 0; let temp = 0; for (let i = 0; i < nums.length - 1; i++) { max = Math.max(max, i + nums[i]); if (i === temp) { jump++; temp = max; } } return jump; } ``` > [name=Marsgoat][time= Feb 8, 2023] #### C++ ##### 思路: 1. 計算從左走到右邊最小步數 2. BFS計算步數, 可想成第一輪可到達的點是index 0, 第二輪是第一輪可新到達的點, ..., 當一輪新到達的點達終點即結束 ```cpp= class Solution { public: int jump(vector<int>& nums) { if(nums.size()==1) return 0; int step = 1, start = 1, end = nums[0]; while(end < nums.size()-1) { int next_round_start = end+1; int next_round_end = end; for(int i = start; i <= end; i++) next_round_end = max(next_round_end, i+nums[i]); start = next_round_start; end = next_round_end; step++; } return step; } }; ``` Time: $O(n)$ Extra Space: $O(1)$ > [name=XD] [time= Feb 8, 2023] #### Python ```python= class Solution: def jump(self, nums: List[int]) -> int: if len(nums) == 1: return 0 jumps, cur_end, cur_far = 0, 0, 0 for i in range(len(nums) - 1): cur_far = max(cur_far, i + nums[i]) if i == cur_end: cur_end = cur_far jumps += 1 return jumps ``` > [name=Ron Chen][time= Feb 9, 2023] ### Reference [回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)