分析
个人比起 55 题更难了。
这题的重点在于如何进行「贪心」地向后查找。
以 [2, 3, 1, 1, 4]
为例:
i = 0
时,最大跳跃距离为 2, i = 1
时,最大跳跃距离为 3。
因此,我们可以维护一个当前可到达的边界 max_jump
。
到达边界时,更新边界值并增加跳跃次数。
解答
class Solution {public: int jump(vector<int> &nums) { auto count = 0; auto end = 0; auto max_jump = 0; auto n = nums.size();
for (auto i = 0; i < n - 1; ++i) { max_jump = max(max_jump, nums[i] + i);
if (max_jump >= n - 1) return count + 1;
if (i == end) { end = max_jump; count++; } }
return count; }};