关闭

leetcode_c++: Jump Game(055)

100人阅读 评论(0) 收藏 举报
分类:

题目

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;
    }
};
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:115458次
    • 积分:6815
    • 等级:
    • 排名:第3540名
    • 原创:589篇
    • 转载:2篇
    • 译文:0篇
    • 评论:2条
    最新评论