From 6041112db350f944525b6ab46c38eb62758d5319 Mon Sep 17 00:00:00 2001 From: EFanZh Date: Mon, 12 Aug 2024 23:05:52 +0800 Subject: [PATCH] Add problem 2009: Minimum Number of Operations to Make Array Continuous --- src/lib.rs | 1 + .../iterative.rs | 43 +++++++++++++++++++ .../mod.rs | 23 ++++++++++ 3 files changed, 67 insertions(+) create mode 100644 src/problem_2009_minimum_number_of_operations_to_make_array_continuous/iterative.rs create mode 100644 src/problem_2009_minimum_number_of_operations_to_make_array_continuous/mod.rs diff --git a/src/lib.rs b/src/lib.rs index 7216c75c..96b53f4f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1486,6 +1486,7 @@ pub mod problem_2003_smallest_missing_genetic_value_in_each_subtree; pub mod problem_2006_count_number_of_pairs_with_absolute_difference_k; pub mod problem_2007_find_original_array_from_doubled_array; pub mod problem_2008_maximum_earnings_from_taxi; +pub mod problem_2009_minimum_number_of_operations_to_make_array_continuous; pub mod problem_2011_final_value_of_variable_after_performing_operations; pub mod problem_2012_sum_of_beauty_in_the_array; pub mod problem_2013_detect_squares; diff --git a/src/problem_2009_minimum_number_of_operations_to_make_array_continuous/iterative.rs b/src/problem_2009_minimum_number_of_operations_to_make_array_continuous/iterative.rs new file mode 100644 index 00000000..a6c63782 --- /dev/null +++ b/src/problem_2009_minimum_number_of_operations_to_make_array_continuous/iterative.rs @@ -0,0 +1,43 @@ +pub struct Solution; + +// ------------------------------------------------------ snip ------------------------------------------------------ // + +impl Solution { + pub fn min_operations(nums: Vec) -> i32 { + let mut nums = nums; + let n = nums.len() as u32; + + nums.sort_unstable(); + nums.dedup(); + + let mut start = 0; + + for &num in &nums { + if nums[start] <= num - n as i32 { + start += 1; + } + } + + let n2 = nums.len() as u32; + + drop(nums); + + (n - (n2 - start as u32)) as _ + } +} + +// ------------------------------------------------------ snip ------------------------------------------------------ // + +impl super::Solution for Solution { + fn min_operations(nums: Vec) -> i32 { + Self::min_operations(nums) + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_solution() { + super::super::tests::run::(); + } +} diff --git a/src/problem_2009_minimum_number_of_operations_to_make_array_continuous/mod.rs b/src/problem_2009_minimum_number_of_operations_to_make_array_continuous/mod.rs new file mode 100644 index 00000000..d3832789 --- /dev/null +++ b/src/problem_2009_minimum_number_of_operations_to_make_array_continuous/mod.rs @@ -0,0 +1,23 @@ +pub mod iterative; + +pub trait Solution { + fn min_operations(nums: Vec) -> i32; +} + +#[cfg(test)] +mod tests { + use super::Solution; + + pub fn run() { + let test_cases = [ + (&[4, 2, 5, 3] as &[_], 0), + (&[1, 2, 3, 5, 6], 1), + (&[1, 10, 100, 1000], 3), + (&[8, 5, 9, 9, 8, 4], 2), + ]; + + for (nums, expected) in test_cases { + assert_eq!(S::min_operations(nums.to_vec()), expected); + } + } +}