算法思想: 每次迭代更新可行至的最大范围r(r必保证>=原位置),至到迭代结束,若r>=length of array则说明可以跳跃至此
#include <iostream>
#include <vector>
#include <string>
#include <sstream>using namespace std;bool canJump(vector<int>& nums) {if(nums.size()==1) return true;int r=0,max1=0;for(int i=0;i<=r;i++){if(r>=nums.size()-1) return true;r=max(r,i+nums[i]);}return false;
}int main() { int n; string s ; getline(cin,s);stringstream ss(s);int a ;vector<int> num;while(ss >> a) num.push_back(a); n=num.size(); if(canJump(num) == true ) cout<<"true"<<endl;else cout << "false"<<endl;// dp[i]表示在位置i后,经过下一跳所达位置后,能到达的最大距离 return 0;
}
变体题: