45. 跳跃游戏II
题目链接
动态规划
- 用step数组记录到达每个位置需要的最小步数,初始step[0]=0,其他为无穷
- 遍历每个位置,从这个位置起跳,更新后面的位置
- 但是要注意,每个位置都只需要更新一次
- 因为起跳点越靠前,步数一定越少
- 如果第二次更新,起跳点的步数一定不会比第一次更新的少
- 因此,每次只需要从上一次更新结束的地方开始即可
class Solution {
public int jump(int[] nums) {
int len = nums.length;
int[] step = new int[len];
step[0] = 0;
for(int i = 1; i < len; i++)
step[i] = Integer.MAX_VALUE;
int j = 1;
for(int i = 0; i < len - 1 && j < len; i++)
for(; j < len && j <= i + nums[i]; j++)
step[j] = Math.min(step[j], step[i] + 1);
return step[len - 1];
}
}