之前刷代码随想录的时候做过这道题,现在做又忘完了(ˉ▽ˉ;)…看了下自己当时写的博客,一下就明白了,这道题就是定义一个变量cover
来记录最大覆盖范围,遍历数组的每一个元素,不断地更新最大覆盖范围,当最大覆盖范围达到或者超过nums.size() - 1
时,则说明可以通过跳跃达到数组的末端,直接返回true
,每循环一次,i
加一,当i
超出cover
的范围时,则说明我们无法通过跳跃的方式到达当前的nums[i]
处,因为cover
并没有把这个元素覆盖住,此时我们退出循环,直接返回false
即可。
class Solution {
public:
bool canJump(vector<int>& nums) {
int cover = 0;
//当i跳出了cover的范围,就说明不能通过下标跳跃的方式跳到终点
for(int i = 0; i <= cover; i++){
cover = max(i + nums[i], cover);
if(cover >= nums.size() - 1) return true;
}
return false;
}
};