给你一个非负整数数组 nums ,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
假设你总是可以到达数组的最后一个位置。
示例 1:
输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
示例 2:
输入: nums = [2,3,0,1,4]
输出: 2
提示:
1 <= nums.length <= 1040 <= nums[i] <= 1000
题解:
class Solution {
public:
int jump(vector<int>& nums) {
int index=0; //当前覆盖最远距离
int nextindex=0; //下一步最远距离
int ans=0;
//这里不用想着i直接加到index,可以遍历过去在if(i==index)里面进行操作
for (int i = 0; i < nums.size(); i++) //一个个遍历不用跳到最远
{
nextindex=max(i+nums[i],nextindex); //更新下一个最远距离
if(i==index){
if(index==nums.size()-1) break; //当前index即为最后一个位置
else {
index=nextindex; //跳下一个index
ans++;
if(index >= nums.size() -1) break;//如果下一个就是可以直接返回
}
}
}
return ans;
//要在这里return ,在for循环中要break到这里,不能直接在for循环中return
}
};
