要求:数组的数表示能走的距离,问能否到达最后
思路:
正常做法
class Solution {
public:
bool canJump(vector<int>& nums) {
int n=nums.size();
vector<bool> dp(n);
dp[0]=true;
for(int i=0;i<n-1;++i){
for(int j=1;j<=nums[i];++j){
if(i+j<n)dp[i+j]=dp[i]||dp[i+j];
if(dp[n-1])return true;
}
}
return dp[n-1];
}
};
优化
class Solution {
public:
bool canJump(vector<int>& nums) {
int n=nums.size();
int rightmost=0;
for(int i=0;i<n;++i){
if(rightmost<i)return false;
rightmost=max(rightmost,i+nums[i]);
}
return rightmost>=n-1;
}
};