0
点赞
收藏
分享

微信扫一扫

LeetCode-45. 跳跃游戏 II(中等)

NicoalsNC 2022-03-15 阅读 25

LeetCode-45. 跳跃游戏 II (中等)

题目地址:https://leetcode-cn.com/problems/jump-game-ii

文章目录

1. 题目描述及示例

      给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。

示例一:

示例二:

2. 题解和代码实现

      在这里典型的使用贪心算法。跳跃游戏有第一种判断能否跳到最后leetcode-55. 跳跃游戏;该题是在上述一题的基础上进行提出来,进行寻找跳到最后所用的最少的跳跃次数,已经给出,肯定能跳到最后
      首先我们得明白,对于nums = [2,3,1,1,4] ,当跳到第一步,它最远能够跳到坐标为2的位置(在这里以坐标0为起点),那么也即是第一步nums[1]和nums[2]均能抵达;那么第二步最远能到跳到那里,即max(nums[1]+1,nums[2]+1),所以一直到第x步,到达或超过最后的位置,在这里的每一步,都是尽可能的跳的更远,所以是典型的贪心算法。

代码实现(C++ 2022-3-15)

class Solution {
public:
    int jump(vector<int>& nums) {
        int length = nums.size(), count = 0, farthest = 0,end = 0;
        //只有一个位置,直接到达,需要进行定义
        if(length == 1){ 
            return 0;
        }
        // 进入循环
        for(int i=0;i<length;i++){
            if(farthest>=i){
                // 求解每一步最远之前的所能到达的最远距离
                farthest = max(farthest,i+nums[i]);
                // 循环到该步的最远位置
                if(i==end){
                    // 进入下一步的最远界定限
                    end = farthest;
                    count++;
                }
            }
            // 判断最终的是否超出该数组的位置
            if(end>=length-1)
                break;
        }
        return count;
    }
};

3. 总结

      对于代码的整体思路欢迎与大家一起讨论交流。

举报

相关推荐

0 条评论