题目描述:
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。1
-
分析:
遍历数组,在本次允许跳跃的范围内更新下一次跳跃可到达的最远距离;直至到达数组最后.统计更新最远距离的次数,就是题目中所求的跳跃次数.
- 代码部分:
public int jump(int[] nums) {
if(nums == null || nums.length <= 1) return 0;
int index = 0;
int maxIdx = 0;//当前可以跳到的最大位置
int step = 0;
int next = 0;//下一步的跳跃最值,这要放在外面,放在里面有可能会缩短搜索空间
//将下一步最远能跳到的位置与nums.length进行比较
while(index < nums.length){
while(index <nums.length && index <= maxIdx){
next = Math.max(next,nums[index] + index);
index ++;
}
maxIdx = next;
step ++;
if(maxIdx >= nums.length - 1) return step;
}
return 0;
}
https://leetcode-cn.com/problems/jump-game-ii/ ↩︎