Leetcode题解系列——55. Jump Game(c++版)

版权声明: https://blog.csdn.net/dickdick111/article/details/83280433

题目链接:55. Jump Game

题目大意:给出一个数组,数组中的元素为非负整数,是可跳跃的数量。从下标为0的数出发,查看是否能到达数组最后的下标(即数组元素数量减一)。

注意点:

  1. 下标是从0开始,而不是1.
  2. 当到达下标大于数组元素数量减一,也说明可以到达最后一个下标

一.算法设计

这道题可以使用贪心算法,由于从零开始跳跃,可以找到许多种方法到达终点,但是这样的复杂度显然过高。于是使用贪心算法,在每一次都判断所能到达的最远距离,它的最远距离一定是该结点的下标加上数值和当前最远距离的最大值即max_num = max(max_num, i+nums[i]);

这样就可以得到,这串数字所能到达的最远下标,如果这个下标大于等于最后的下标,表示可以到达。
如果最远下标小于了i+1,表示为nums数组的i+1的值为0的情况,这时就不可能到达了。

二.算法实现

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

猜你喜欢

转载自blog.csdn.net/dickdick111/article/details/83280433
今日推荐