LeetCode //45. Jump Game II

45. 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 < = n u m s . l e n g t h < = 1 0 4 1 <= nums.length <= 10^4 1<=nums.length<=104
  • 0 < = n u m s [ i ] < = 1000 0 <= nums[i] <= 1000 0<=nums[i]<=1000
  • It’s guaranteed that you can reach nums[n - 1].

From: LeetCode
Link: 45. Jump Game II


Solution:

Ideas:
In this code, farthest keeps track of the farthest index that can be reached. currentEnd keeps track of the end of the current jump. If we reach currentEnd, we increase the jumps counter and set currentEnd to farthest since that’s the farthest we can reach with the current number of jumps.
Code:
int jump(int* nums, int numsSize){
    if (numsSize == 1) {
        return 0;
    }
    
    int jumps = 0;
    int farthest = 0;
    int currentEnd = 0;
    
    for (int i = 0; i < numsSize - 1; i++) {
        farthest = (i + nums[i] > farthest) ? i + nums[i] : farthest;
        if (i == currentEnd) {
            jumps++;
            currentEnd = farthest;
        }
    }
    
    return jumps;
}

你可能感兴趣的:(LeetCode,leetcode,算法,c语言)