这是一道DP问题,简单的去理解,就是去查找在这一次能跳跃的最大范围内,下一次最大的跳跃范围是多少,以此来进行跳跃,最后判断是否能够跳到最后一个元素。
在这里,我定义一个变量max_Right
用以动态维护在当前这次跳跃中,能够跳跃到的最远的距离,在走到当前边界的过程中,一定是会寻找到下一次跳跃的最远距离,当能够跳跃的最远距离大于或等于最后一个元素时,就说明是可以到达的,返回true
,否则返回false
。思路有了,动手写代码,AC代码如下:
class Solution {
public:
bool canJump(vector<int>& nums) {
int len = nums.size();
int max_Right = 0;
for(int i=0;i<len;i++) {
if(i <= max_Right ) {
max_Right = max(max_Right, i+nums[i]);
if(max_Right >= (len-1)) {
return true;
}
}
}
return false;
}
};