p126 跳跃游戏(leetcode 55)

一:解题思路

Time:O(n),Space:O(1)

maxValue为最远可以跳到的距离。

1.如果当前的可以跳到的最远距离已经到底了末尾,或者已经超过末尾的,直接返回true。

2.如果当前下标已经超过最远可以到达的距离,直接返回false。

3.不断更新最远可以跳到的距离。

二:完整代码示例 (C++版和Java版)

C++:

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

        return false;
    }
};

Java:

 class Solution {
        public boolean canJump(int[] nums)
        {
             if(nums==null || nums.length==0) return false;
             int n=nums.length;
             int maxValue=0;
             for(int i=0;i<n;i++)
             {
                 if(maxValue>=n-1) return true;
                 if(i>maxValue) return false;
                 maxValue=Math.max(maxValue,i+nums[i]);
             }

             return false;
        }
    }

 

posted @ 2020-04-14 20:47  repinkply  阅读(148)  评论(0)    收藏  举报