new problem
parent
de0b29db31
commit
923502c275
@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "minimum-number-of-jumps"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
@ -0,0 +1,3 @@
|
||||
The algorithm iterates over the `nums` vector exactly once. For each element in the `nums` vector, it performs a constant amount of work - it updates `cur_farthest` and checks if `i` is equal to `cur_end`. If `i` is equal to `cur_end`, it increments `jumps` and updates `cur_end`. All of these operations take constant time.
|
||||
|
||||
Therefore, the time complexity of the algorithm is O(n), where n is the length of the `nums` vector.
|
@ -0,0 +1,44 @@
|
||||
impl Solution {
|
||||
pub fn jump(nums: Vec<i32>) -> i32 {
|
||||
let mut jumps = 0;
|
||||
let mut cur_end = 0;
|
||||
let mut cur_farthest = 0;
|
||||
for i in 0..nums.len() - 1 {
|
||||
cur_farthest = cur_farthest.max(i + nums[i] as usize);
|
||||
if i == cur_end {
|
||||
jumps += 1;
|
||||
cur_end = cur_farthest;
|
||||
}
|
||||
}
|
||||
jumps
|
||||
}
|
||||
}
|
||||
|
||||
struct Solution;
|
||||
|
||||
// write tests
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_1() {
|
||||
assert_eq!(Solution::jump(vec![2, 3, 1, 1, 4]), 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_2() {
|
||||
assert_eq!(Solution::jump(vec![2, 3, 0, 1, 4]), 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_3() {
|
||||
assert_eq!(Solution::jump(vec![1, 2, 3]), 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_4() {
|
||||
assert_eq!(Solution::jump(vec![1, 2, 1, 1, 1]), 3);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue