45.跳跃游戏 II
This commit is contained in:
parent
817465a4f4
commit
ab2352a351
|
@ -61,3 +61,4 @@ mod q0122;
|
|||
mod q0118;
|
||||
mod q0119;
|
||||
mod q0392;
|
||||
mod q0045;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue