知识点

模拟

思路

设nums.size()=n;

首先用一个长度为n的bool数组a维护每个障碍的可达状态,true表示可达,false表示不可达。初始化只有a[0]为true,其他全为false

开始遍历Nums[]数组:

对于a[i]==true的位置,a[i~i+nums[i]]都是可达的,都可以赋值为true。 对于a[i]==false的位置,不可达,无意义。

最后判断a[n-1]是否为true即可,这就是最后一个障碍的可达状态。

代码c++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return bool布尔型
     */
    bool can_jump(vector<int>& nums) {
        // write code here
        bool a[10000];
       
        int n=nums.size();
        for(int i=0;i<n;i++)
        {
            a[i]=false;
        }
        a[0]=true;
        for(int i=0;i<n;i++)
        {
         if(!a[i])continue;
         for(int j=1;j<=nums[i];j++)
         {
            a[i+j]=true;
         }
        }

       return a[n-1];
        



    }
};