跳跃游戏

分析

这题的核心在于维护“当前能够到达的最远位置”。

更合适的做法是使用贪心思路来解答。 当 max_jump 的值大于等于 i 时,意味着此时 i 可达。 此时可通过比较 max_jumpi + nums[i] 的最大值, 并将结果存储在 max_jump 中。 而当 max_jump 大于等于数组最大索引时,说明最后一个位置可达,返回 true。 如果遍历过程中出现 i > max_jump,则当前位置不可达,应返回 false

解答

class Solution {
public:
bool canJump(vector<int> &nums) {
auto max_jump = 0;
auto n = nums.size();
if (n == 1)
return true;
for (auto i = 0; i < n; ++i) {
if (i <= max_jump) {
max_jump = max(max_jump, i + nums[i]);
if (max_jump >= n - 1)
return true;
} else
break;
}
return false;
}
};