难度困难815
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例:
输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是2
。 从下标为 0 跳到下标为 1 的位置,跳1
步,然后跳3
步到达数组的最后一个位置。
说明:
假设你总是可以到达数组的最后一个位置。
23:08 info
解答成功:
执行耗时:2 ms,击败了96.40% 的Java用户
内存消耗:40.5 MB,击败了55.15% 的Java用户
class Solution {
public int jump(int[] nums) {
//思路:就是找到每次能跳到的最远的位置,再从最远位置能跳的区间找到下一个能跳的最远位置。
int start=1;
int end=nums[0];
int step=0;
int maxd=nums[0];
while(start<nums.length){
//判断逻辑:走过的位置在start之前,那么只要判断start是否超过长度即可
//统计次数的逻辑:走过位置到达了end才能统计一次
for (int i = start; i < nums.length&&i<=end; i++) {
maxd=Math.max(maxd, nums[i]+i);
}
//
step++;
//设置下一区间为当前end+1到最远位置
start=end+1;
end=maxd;
}
return step;
}
}