本题采用贪心策略解解决。设置一个记录当前能跳跃到的最大下标变量 cover,从下标 0 开始 “跳跃” 时总是将 cover 更新为 max(cover, i + nums[i]),直到 cover 不再增加或 cover 能覆盖最后一个数。
class Solution { public: bool canJump(vector<int>& nums) { int n = nums.size(); int cover = nums[0]; for(int i = 0; i <= cover && i < n; i ++) { // 注意此处是i<=cover,否则步长为1时就退出循环了 cover = max(cover, i + nums[i]); } if(cover >= n - 1) return true; else return false; } };