1. class Solution {
    2. public:
    3. bool canJump(vector<int>& nums) {
    4. /* 充能视角,每个格子给的跳跃资源和当前持有的资源取最大的继续前行 */
    5. int len= nums.size(),i=1;
    6. for(int cur=nums[0];cur!=0&&i<len;++i){
    7. cur--;
    8. if(cur<nums[i]) cur=nums[i];
    9. }
    10. return i==len;
    11. }
    12. };

    给定一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。

    • 1 <= nums.length <= 3 * 104
    • 0 <= nums[i] <= 105

    思路是从出发点开始获取资源,循着数组路径遍历下去,资源在每行进一格会消耗一次,然后依照当前持有的资源和当前位置提供的资源获取最大值作为补充后的资源数量,如果能到达数组最后位置的时候资源数量非负就说明可以到达最终点。