描述
给定一个非负整数数组,您最初定位在数组的第一个索引处。数组中的每个元素表示该位置的最大跳转长度。您的目标是以最小跳跃次数到达最后一个索引。
样例
样例11
2输入: [2,3,1,1,4]
输出: 2
样例21
2输入: 1 4
输出: 1
思路
第一种方式,回溯,简单粗暴
第二种方式,贪心,跳到最远的地方去。我们不管怎么跳,总能到达最后一块石头。
代码
1 | class Solution { |
优解1
2
3
4
5
6
7
8
9
10
11
12
13
14class Solution {
public:
int jump(vector<int>& nums) {
int reach=0, maxReach=0, res=0;
for(int i=0; i<nums.size(); ++i) {
if(reach<i) {
reach=maxReach;
++res;
}
maxReach=max(maxReach, i+nums[i]);
}
return res;
}
};