题目:
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
Example 1:
Input: [2,3,1,1,4] Output: true Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
Example 2:
Input: [3,2,1,0,4] Output: false Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.
描述:
给出一个数组,代表在每个位置所能跳的最远距离,初始时位于最左侧的位置,问是否可以跳到最右侧的位置
分析:
貌似是先前这道题(点这里)的简化版,
唯一需要注意的是,不一定能跳到终点,而不能跳到终点的必要条件是,在中间某个必经的位置处的数字为0,
继续先前那道题的思路,在某一次找到的新起点(非终点)处,该处的值为 0 。
代码:(时间复杂度 O (n),空间复杂度 O (1))
class Solution {
public:
bool canJump(vector<int>& nums) {
int start = 0, new_start = 0, len = nums.size();
if (!nums[start]) {
return start == len - 1;;
}
for (int i = 1; i < len; ++ i) {
if (new_start + nums[new_start] <= i + nums[i]) {
new_start = i;
}
if (start + nums[start] == i || i == len - 1) {
start = new_start;
if (nums[start] == 0) {
return i == len - 1;
}
}
}
return true;
}
};