Leetcode 55. 跳跃游戏

Leetcode 55. 跳跃游戏

题目

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

思路

能不能到达终点 取决于 前面n - 1个元素的覆盖范围是否大于或者等于最后一个元素

因为计算前面n - 1个元素的最大覆盖范围,如果这个最大覆盖范围大于或者等于nums.szie() - 1 说明最后一定可以达到最后一个下标

代码

class Solution {
public:
    bool canJump(vector<int>& nums) {
        // 能不能到达终点  取决于 前面n - 1个元素的覆盖范围是否大于或者等于最后一个元素
        int cover = 0;
        if(nums.size() == 1)
        {
            return true;// 一个元素 直接返回true
        }

        // i <= cover 的原因是 对于cover里面的每一个元素 都累加一下他的最大跳跃范围 然后更新cover
        for(int i  = 0; i <= cover; i++)
        {
            cover = max(i + nums[i],cover);// 更新覆盖范围

            if(cover >= nums.size() - 1)
            {
                return true;// 当覆盖范围大于或者等于nums.size() - 1 说明 一定可以到达最后一个位置
            }

        }
        return false;
    }
};

你可能感兴趣的:(Algorithm,#,Leetcode,leetcode,游戏,算法)