
这个题的核心是贪心思想,关键在于计算可以到达的最远距离
如果可以到达某个位置,那么一定可以到达他前面的所有位置
cpp
class Solution {
public:
bool canJump(vector<int>& nums) {
// 最远位置初始化
int k=0;
// 从初始位置出发,依次向后遍历
// 注意:我们可以遍历的是当前最远位置及前面的位置,如果遍历到当前最远位置了,那么后续其他位置更不可能到达,无需遍历
for(int i=0;i<nums.size() && i<=k;i++)
// 更新最远位置的数据信息
k=max(k,i+nums[i]);
// 整个列表最远位置是长度减一
if(k>=nums.size()-1) return true;
else return false;
}
};