算法思想: 每次迭代更新可行至的最大范围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;
}
变体题: