diff --git a/src/lib.rs b/src/lib.rs index c4dd0f20..45dbddaa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1440,6 +1440,7 @@ pub mod problem_2063_vowels_of_all_substrings; pub mod problem_2068_check_whether_two_strings_are_almost_equivalent; pub mod problem_2069_walking_robot_simulation_ii; pub mod problem_2070_most_beautiful_item_for_each_query; +pub mod problem_2073_time_needed_to_buy_tickets; pub mod problem_2078_two_furthest_houses_with_different_colors; pub mod problem_2085_count_common_words_with_one_occurrence; pub mod problem_2089_find_target_indices_after_sorting_array; diff --git a/src/problem_2073_time_needed_to_buy_tickets/mod.rs b/src/problem_2073_time_needed_to_buy_tickets/mod.rs new file mode 100644 index 00000000..1781d1a0 --- /dev/null +++ b/src/problem_2073_time_needed_to_buy_tickets/mod.rs @@ -0,0 +1,18 @@ +pub mod sliding_window; + +pub trait Solution { + fn time_required_to_buy(tickets: Vec, k: i32) -> i32; +} + +#[cfg(test)] +mod tests { + use super::Solution; + + pub fn run() { + let test_cases = [((&[2, 3, 2] as &[_], 2), 6), ((&[5, 1, 1, 1], 0), 8)]; + + for ((tickets, k), expected) in test_cases { + assert_eq!(S::time_required_to_buy(tickets.to_vec(), k), expected); + } + } +} diff --git a/src/problem_2073_time_needed_to_buy_tickets/sliding_window.rs b/src/problem_2073_time_needed_to_buy_tickets/sliding_window.rs new file mode 100644 index 00000000..78ea5ed5 --- /dev/null +++ b/src/problem_2073_time_needed_to_buy_tickets/sliding_window.rs @@ -0,0 +1,38 @@ +pub struct Solution; + +// ------------------------------------------------------ snip ------------------------------------------------------ // + +impl Solution { + pub fn time_required_to_buy(tickets: Vec, k: i32) -> i32 { + let k = k as u32 as usize; + let mut result = 0; + let target = tickets[k]; + let (left, right) = tickets.split_at(k + 1); + + for &num in left { + result += num.min(target); + } + + for &num in right { + result += num.min(target - 1); + } + + result + } +} + +// ------------------------------------------------------ snip ------------------------------------------------------ // + +impl super::Solution for Solution { + fn time_required_to_buy(tickets: Vec, k: i32) -> i32 { + Self::time_required_to_buy(tickets, k) + } +} + +#[cfg(test)] +mod tests { + #[test] + fn test_solution() { + super::super::tests::run::(); + } +}