0
点赞
收藏
分享

微信扫一扫

跳跃游戏

zhongjh 2022-01-31 阅读 69
leetcode

这道题有一个性质,只要发现就会变得简单

我们能跳到的位置,一定是连续的一段

如图所示,我们较后面的一个点是由前面一个点跳过来的,如果他能跳到较后的点,那么它少跳一点也能跳到前面的一个点,所以我们能跳的点,一定是连续的一段

接下来我们来判断我们怎样才到不了终点,那么肯定实在中间某个点停下来了,现在把这个点叫做i,那么前面i-1个点跳的最远距离,一定小于i点所在的位置。ok现在就可以做了

步骤:

1.j表示前i-1个数能跳的最右边的距离

2.遍历整个数组如果j《i就表示到达不了终点

注意:这里一定要先判断j<i是否成立,如果更新j再i的前面就表示为,再第i个数能跳的最远距离

class Solution {
public:
    bool canJump(vector<int>& nums) {
       for(int i=0,j=0;i<nums.size();i++){
           if(j<i)return false;
           j=max(j,i+nums[i]);
       }
       return true;
    }
};
举报

相关推荐

跳跃游戏 II

跳跃游戏IV

跳跃游戏2

跳跃游戏(优化

【leetcode】 跳跃游戏 IV

算法分析:跳跃游戏

0 条评论