- 与上一题相比,本题需要计算最少步数
- 思想与上一题相似,都是考虑覆盖范围,根据这个范围来判定是否可以到达最后一个位置
- 要知道,如果不是一步到达终点,就需要考虑在每一步的时候可以覆盖的最大范围
- 而开始下一步时,要更新当前步的最大覆盖范围
#include <iostream>
#include <vector>
class Solution {
public:
int jump(std::vector<int>& nums) {
if (nums.size() == 1)
return 1;
int cover = 0, next_cover = 0, times = 0;
for (int i = 0; i < nums.size(); ++i) {
next_cover = std::max(next_cover, i + nums.at(i));
if (i == cover) {
if (cover != nums.size() - 1) {
++times;
cover = next_cover;
if (cover >= nums.size() - 1)
break;
} else
break;
}
}
return times;
}
};
int main()
{
Solution s;
std::vector<int> nums {2, 3, 0, 1, 4};
std::cout << s.jump(nums) << std::endl;
return 0;
}