这道题很简单,仅仅是一个区间合并。
我们可以记l为当前区间的左端,r为当前区间的右端,每次遍历区间中的数,以更新l、r当出现更新r更新后不变的情况时,即反对false,当出现r>=n-1时,返回true即可;
下面是代码;
class Solution {
public:
bool canJump(vector<int>& nums) {
if(nums.size()<=1) return 1;
int l=0,r=0;
while(r<nums.size()-1){
int min=l,max=r;
for(int i=min;i<=max;i++){
if(i+nums[i]>r) r=i+nums[i];
}
if(max==r) return 0;
l=max;
}
return 1;
}
};
时间复杂度是o(n)