分析
-
本题的考点:数组。
-
从前往后遍历
nums
数组,记录我们能跳到的最远位置j
,如果存在我们不能跳到的下标i
,返回false
即可,否则返回true
。
代码
- C++
class Solution {
public:
bool canJump(vector<int>& nums) {
for (int i = 0, j = 0; i < nums.size(); i++) {
if (j < i) return false; // 说明从[0~i-1]能跳到的最远位置j不能到达位置i
j = max(j, i + nums[i]); // 从下标i最远跳到下标i+nums[i]
}
return true;
}
};
- Java
class Solution {
public boolean canJump(int[] nums) {
for (int i = 0, j = 0; i < nums.length; i++) {
if (j < i) return false;
j = Math.max(j, i + nums[i]);
}
return true;
}
}
时空复杂度分析
-
时间复杂度:$O(n)$,
n
为数组长度。 -
空间复杂度:$O(1)$。
兄弟有时间填个邀请码hhhhhhhhh(可以得AC币,邀请码在学生认证那填) 我的邀请码是:GUDFH