题目:45. 跳跃游戏 II
思路
贪心法;
只需记录2个变量,当前点能达到的最远距离,和上一步能到达的最远距离;
(真有意思,代码随想录给出的是curDistance
,nextDistance
2个,和我命名不一样,是思考角度不同的缘故)
代码
class Solution {
public:
int jump(vector<int>& nums) {
int step = 0;
int i;
int cover1 = 0, cover2 = 0;
if(nums.size() == 1)
{
return 0;
}
for(i = 0; i < nums.size(); i++)
{
// 当前点能达到的最大距离
cover2 = max(cover2, nums[i]+i);
// 上一步就只能到这了
if(cover1 == i)
{
step++;
if(cover2 >= nums.size()-1)
{
// 可以到终点了;
break;
}
cover1 = cover2;
}
}
return step;
}
};
特殊情况:只有一个元素的时候,不需要跳,就直接到终点了(初始位置就在终点上);