题意:
        给定一个非负整数数组nums,假定最开始处于下标为0的位置,数组里面的每个元素代表下一跳能够跳跃的最大长度。
        如果能够跳到数组最后一个位置,则返回true,否则返回false。

方法一:
贪心

思路:
        用一个变量ma 表示(可达下标的最大值),初始化ma=0。
        循环遍历数组,更新并维护 ma 的最大值。
        当ma>=n-1时,则说明可以到达数组的最后一个位置。



class Solution {
public:
    
    bool canJump(vector<int>& nums) {
        int n=nums.size();
        int ma=0;//初始化下标的最大值
        for(int i=0;i<n&&i<=ma;i++){
            ma=max(ma,i+nums[i]);//维护下标的最大值
        }
        if(ma>=n-1){
            return true;
        }
        return false;
    }
};


时间复杂度:
空间复杂度:

方法二:
暴力(超时)

思路:
        vis[ ]数组表示某位置是否可达。
        初始化vis[0]=1,表示0位置可达。
        遍历数组的每个元素,如果该位置可达,则从该位置出发,遍历所有可达的点并置vis[ ]为1;
        最后判断数组的最后一个位置是否可达。

class Solution {
public:
    
    bool canJump(vector<int>& nums) {
        int n=nums.size();
        int vis[200005]={0};//判断某位置是否可达
        vis[0]=1;//初始化下标0位置是可达的
        for(int i=0;i<n;i++){
            if(vis[i]==1){//如果该位置可达,则从该位置出发,遍历所有可达的点并置vis[]为1
                for(int j=1;j<=nums[i];j++){
                    if(i+j<n)
                        vis[i+j]=1;
                }
            }
        }
        if(vis[n-1]==1){//最后判断数组的最后一个位置是否可达
            return true;
        }
        return false;
    }
};

时间复杂度:
空间复杂度: