45.跳跃游戏 II

This commit is contained in:
游由 2021-07-16 07:29:04 +08:00
parent 817465a4f4
commit ab2352a351
2 changed files with 62 additions and 0 deletions

View File

@ -61,3 +61,4 @@ mod q0122;
mod q0118;
mod q0119;
mod q0392;
mod q0045;

View File

@ -0,0 +1,61 @@
use crate::Solution;
impl Solution {
/// 45.跳跃游戏 II
///
/// [原题链接](https://leetcode-cn.com/problems/jump-game-ii/)
///
/// 2021-07-15 09:50:43
///
/// 给定一个非负整数数组,你最初位于数组的第一个位置。
///
/// 数组中的每个元素代表你在该位置可以跳跃的最大长度。
///
/// 你的目标是使用最少的跳跃次数到达数组的最后一个位置。
///
/// 假设你总是可以到达数组的最后一个位置。
///
/// + 示例 1:
/// - 输入: `[2,3,1,1,4]`
/// - 输出: `2`
/// - 解释: 跳到最后一个位置的最小跳跃数是 `2`。
/// 从下标为 `0` 跳到下标为 `1` 的位置,跳 `1` 步,然后跳 `3` 步到达数组的最后一个位置。
/// + 示例 2:
/// - 输入: `[2,3,0,1,4]`
/// - 输出: `2`
/// + 提示:
/// - `1 <= nums.length <= 1000`
/// - `0 <= nums[i] <= 105`
///
/// Related Topics 贪心 数组 动态规划
///
/// 👍 1053 👎 0
pub fn jump(nums: Vec<i32>) -> i32 {
let length = nums.len();
let mut end = 0;
let mut max_position = 0;
let mut steps = 0;
for i in 0..length - 1 {
max_position = max_position.max(i + nums[i] as usize);
if i == end {
end = max_position;
steps += 1;
}
}
steps
}
}
#[cfg(test)]
mod test {
use crate::Solution;
#[test]
fn test_q0045() {
let nums = vec![2,3,0,1,4];
let ans = Solution::jump(nums);
assert_eq!(ans, 2);
}
}