题目描述:
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例:
输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
说明:
假设你总是可以到达数组的最后一个位置。
思路:
1、如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点;可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离maxdistance 不断更新。
2、首先从第0个元素开始,边界end是0,可以跳到的最远距离2,可以跳到1(i =1,maxPos就是4),也可以跳到2(i= 2,maxPos就是3),但是只有两个选择,贪心算法的要素就是获取当前阶段最优解;显然应该跳到1,此时边界end是2。遍历数组的时候,到了边界,我们就重新更新新的边界。
3、如果maxdistance的值大于等于len-1,那么就可以一直跳到最后,就成功了。
Java解法:
class Solution {
public int jump(int[] nums) {
int len = nums.length;
int ans = 0;
int end = 0;
int maxPos = 0;
for (int i = 0; i < len - 1; i++)
{
maxPos = Math.max(nums[i] + i, maxPos);
if(maxPos >= len - 1) return ans + 1;
if (i == end)
{
end = maxPos;
ans++;
}
}
return ans;
}
}
python解法:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game-ii
网友评论