LandscapeMi

landscapemi的博客

leetcode_c++: Jump Game(055)

题目

given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Determine if you are able to reach the last index.

For example:
A = [2,3,1,1,4], return true.

A = [3,2,1,0,4], return false.


算法

DP:局部最优和全局最优解法
复杂度:O(N)

  • 维护两个变量
  • 全局最优:到目前为止能跳到的最远距离
  • 局部最优:从当前一步出发能跳到的最远距离
  • local[i]=A[i]+i
  • global[i]=max(global[i],local[i])


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

        if(reach<n-1)
            return false;
        return true;
    }
};

算法

贪心:O(N)

  • 跳到位置i后,可以达到的最大距离至少是i+A[i]
  • 记录当前能达到的最远距离maxIndex
    1. 能跳到的位置 i 的条件是: i<=maxIndex
    2. 一旦跳到i,则maxIndex=max(maxIndex,i+A[i])
    3. 能跳到最后一个位置 n1 的条件是maxindex>=n-1

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

        return maxIndex>=(n-1)? true:false;
    }
};
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mijian1207mijian/article/details/51542322
个人分类: leetcode(c++)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

leetcode_c++: Jump Game(055)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭