diff --git a/src/lib.rs b/src/lib.rs index f3025202..b97ecadf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1748,6 +1748,7 @@ pub mod problem_2349_design_a_number_container_system; pub mod problem_2351_first_letter_to_appear_twice; pub mod problem_2352_equal_row_and_column_pairs; pub mod problem_2353_design_a_food_rating_system; +pub mod problem_2357_make_array_zero_by_subtracting_equal_amounts; #[cfg(test)] mod test_utilities; diff --git a/src/problem_2357_make_array_zero_by_subtracting_equal_amounts/bit_masks.rs b/src/problem_2357_make_array_zero_by_subtracting_equal_amounts/bit_masks.rs new file mode 100644 index 00000000..7ecda61a --- /dev/null +++ b/src/problem_2357_make_array_zero_by_subtracting_equal_amounts/bit_masks.rs @@ -0,0 +1,33 @@ +pub struct Solution; + +// ------------------------------------------------------ snip ------------------------------------------------------ // + +impl Solution { + pub fn minimum_operations(nums: Vec) -> i32 { + let mut seen = 0_u128; + + for num in nums { + if num != 0 { + seen |= 1 << (num as u8); + } + } + + seen.count_ones() as _ + } +} + +// ------------------------------------------------------ snip ------------------------------------------------------ // + +impl super::Solution for Solution { + fn minimum_operations(nums: Vec) -> i32 { + Self::minimum_operations(nums) + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_solution() { + super::super::tests::run::(); + } +} diff --git a/src/problem_2357_make_array_zero_by_subtracting_equal_amounts/mod.rs b/src/problem_2357_make_array_zero_by_subtracting_equal_amounts/mod.rs new file mode 100644 index 00000000..dde8efb2 --- /dev/null +++ b/src/problem_2357_make_array_zero_by_subtracting_equal_amounts/mod.rs @@ -0,0 +1,18 @@ +pub mod bit_masks; + +pub trait Solution { + fn minimum_operations(nums: Vec) -> i32; +} + +#[cfg(test)] +mod tests { + use super::Solution; + + pub fn run() { + let test_cases = [(&[1, 5, 0, 3, 5] as &[_], 3), (&[0], 0)]; + + for (nums, expected) in test_cases { + assert_eq!(S::minimum_operations(nums.to_vec()), expected); + } + } +}