Leetcode-045-跳跃游戏II

Leecode-045-Jump Game II

思路:贪心算法

题目描述

本题是上一题(Leetode-55-跳跃游戏)的扩展题。

来看题目描述:

1
2
3
4
输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2
  从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
  • 给定一个非负整数数组,你最初位于数组的第一个位置。
  • 数组中的每个元素代表你在该位置可以跳跃的最大长度。
  • 目标是使用最少的跳跃次数到达数组的最后一个位置。

Solution:

  • 思路:贪心算法
    • 每次在可跳范围内再次选择可以跳的更远的位置
  1. 如下图所示:
  • 开始的时候位置是2,可跳范围是橙色的。
  • 但是因为3可以跳的更远,所以跳到3的位置。

mark

  1. 如下图所示:
  • 开始的位置是3
  • 能跳的范围是橙色表示
  • 但是因为4可以跳的更远,所以下次跳到4的位置

mark

Java

Solution :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution{
public int jump(int[] nums){
// 记录能跳的最大位置
int rightmost = 0;
// 返回的步数
int steps = 0;

int n = nums.length;

// 用来判断结果
int end = 0;

// 不去判断最后一个元素是否能跳,所以是 n-1
for (int i = 0; i < n - 1; i++) {
// 记录每个点能跳的最远距离
rightmost = Math.max(rightmost,i + nums[i]);
// 遇到边界,就更新边界,并且步数加一
if (i == end) {
end = rightmost;
steps++;
}
}
return steps;
}
}
  • 时间复杂度:O(n) 遍历一遍数组(0 - n-1的索引位置)
  • 空间复杂度:O(1) 没有额外的空间

Python

Solution :

1
2


打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信