题目
给你一个非负整数数组 nums ,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
假设你总是可以到达数组的最后一个位置。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
class Solution {
public int jump(int[] nums) {
int n=nums.length;
int maxlen=0,end=0,ans=0;
for (int i = 0; i < n-1; i++) {
maxlen=Math.max(maxlen,i+nums[i]);//记录一个区间内最大位置,然后跳到这个最大位置,贪心
if (i==end){//每个区间的终结条件
ans++;
end=maxlen;
}
}
return ans ;
}
}
要点
- 本题可以使用动归遍历所有可能,但本题可以使用贪心
- 贪心策略为每次跳最远那个,然后遍历跳跃的区间内,能跳到下一个最远的地方,当本次区间遍历到头时,跳到下一个最远地方,然后一次遍历区间。