大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

这道题目考察的是数组的遍历和贪心算法。

题目解答方法的文字分析

题目给出了一个非负整数数组 nums,表示处在第 i 个障碍时可以的最大跳跃长度。牧人领着牛群首先站在第一个障碍位置,我们需要判断牧人是否能够带领牛群跨越所有障碍,并到达最后一个障碍的位置。

我们可以使用贪心算法来解决这个问题。贪心算法的思想是每次都选择局部最优解,从而达到全局最优解。在这个问题中,我们可以贪心地选择跳跃的步数,每次选择能够跳跃最远的步数。

具体做法如下:

  1. 初始化一个变量 maxReach 表示当前能够跳跃的最远距离,初始值为 0。
  2. 遍历数组 nums,对于每个位置 i,判断当前位置是否能够到达,即判断 i 是否小于等于 maxReach。
  3. 如果当前位置 i 能够到达,则更新 maxReach 为 max(maxReach, i + nums[i]),表示当前位置能够跳跃的最远距离。
  4. 继续遍历数组,直到遍历完所有位置。
  5. 如果在遍历过程中,maxReach 大于等于数组的最后一个位置(即 nums.size() - 1),说明牧人能够带领牛群跨越所有障碍并到达最后一个障碍的位置,返回 true;否则,返回 false。

本题解析所用的编程语言

C++

完整且正确的编程代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return bool布尔型
     */
    bool can_jump(vector<int>& nums) {
        int n = nums.size();
        int maxReach = 0; // 当前能够跳跃的最远距离

        for (int i = 0; i < n; ++i) {
            if (i <= maxReach) {
                // 当前位置能够到达,更新能够跳跃的最远距离
                maxReach = max(maxReach, i + nums[i]);
                if (maxReach >= n - 1) {
                    // 如果能够跳跃的最远距离大于等于数组的最后一个位置,返回 true
                    return true;
                }
            }
        }

        return false;
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!