55. Jump Game

来源:互联网 发布:部落冲突蓝胖子数据 编辑:程序博客网 时间:2024/06/05 05:48

题目:

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法,动态规划法。

思路一:

维持一个全局最大可达距离,将每个元素的最大可达距离与全局最大可达距离相比,如果大于全局最大,则更新全局最大,否则维持原全局最大可达。

代码:

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

从第一个元素开始,往后面循环一次max-1,之后将max-1与元素值nums[i]进行比较,取最大值。

代码:

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


0 0
原创粉丝点击