55. Jump Game

来源:互联网 发布:cfca 网络身份认证平台 编辑:程序博客网 时间:2024/06/05 23:40

这里写图片描述
这道题的要求是给定一整数数组,数组元素表示每次可以跳跃的最大距离。然后初始位置在数组的第一个元素,返回能否数到达最后元素。
采用贪心的思路,采用reach变量维护能到达最远处,即为全局最优解。当遍历到i的时候,局部最优解为A[i]+i,因此,此时的全局最优解即为reach和A[i]+i的最大值:reach = max(reach, A[i] + i)。

#include<iostream>#include<vector>using namespace std;class Solution {public:    bool canJump(vector<int>& nums)     {        int reach=0,i;        for(i=0;i<=reach&&i<nums.size();i++)            reach=reach>nums[i]+i?reach:nums[i]+i;        if(reach>=nums.size()-1)//if(i==nums.size())            return true;        else            return false;    }};int main(){    int N,i,x;    vector<int>nums;    cin>>N;    for(i=0;i<N;i++)    {        cin>>x;        nums.push_back(x);    }    Solution solve;    bool result;    result=solve.canJump(nums);    cout<<result<<endl;    return 0;}

还有Jump Game II这道题,是这题的提升,需要计算到达最后元素时的最小步数。

0 0
原创粉丝点击