题目
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
说明:
假设你总是可以到达数组的最后一个位置。
思路
1、用变量maxx记录当前能跳到的最远位置
2、用变量end记录下一次跳跃的位置
3、用变量ans记录需要跳跃的次数
代码
class Solution {
public:
int jump(vector<int>& nums) {
//maxx记录当前可跳最远位置 ans记录跳跃次数 end记录下一次跳跃位置
int maxx = 0, ans = 0, end = 0, n = nums.size();
for(int i=0; i<n-1; i++){
if(maxx >= i){
//维护当前可跳最远距离
maxx = max(maxx, i + nums[i]);
//当到了需要跳跃的位置
if(i == end){
//将下一次跳跃的位置更新为当然能跳的最远距离
end = maxx;
++ans;
//但下一次跳跃已经大于数组长度,则直接返回答案
if(end>=n)
return ans;
}
}
}
return ans;
}
};