思路:
尽可能增大覆盖范围
先一边走一边记录下 下一次的最大覆盖范围是什么,如果当前已经走到了覆盖范围,就启动下一次的覆盖范围,如果下一次的覆盖范围直接覆盖到了终点,就break,否则继续按照覆盖范围移动,以此往复。
class Solution {
public:
int jump(vector<int>& nums) {
int step = 0;
int cover = 0;
int nextcover = 0;
if(nums.size() == 1)
return 0;
for(int i = 0; i < nums.size(); i++)
{
int nextcover = max(nextcover, i + nums[i]); // 记录下一次最大的覆盖范围
if(cover == i) // 当前的走到头了
{
if(cover < nums.size() - 1) // 但是还没到终点
{
step++; // 跳数 + 1
cover = nextcover; // 启动下一次的覆盖范围
if(nextcover >= nums.size() - 1) // 下一次的覆盖范围到了终点
break;
}
else // 已经到了终点
break;
}
}
return step;
}
};