From 0f62b9c42e99eafaf3295d5498238b0c67f8742a Mon Sep 17 00:00:00 2001 From: jackfiled Date: Thu, 30 Jan 2025 14:59:47 +0800 Subject: [PATCH] 20250130 finished. --- src/problem/mod.rs | 2 + .../p350_intersection_of_two_arrays_ii.rs | 54 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/problem/p350_intersection_of_two_arrays_ii.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 82c34d4..8b7569f 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -458,3 +458,5 @@ mod p2412_minimum_money_required_before_transactions; mod p40_combination_sum_ii; mod p119_pascals_triangle_ii; + +mod p350_intersection_of_two_arrays_ii; diff --git a/src/problem/p350_intersection_of_two_arrays_ii.rs b/src/problem/p350_intersection_of_two_arrays_ii.rs new file mode 100644 index 0000000..88f0dec --- /dev/null +++ b/src/problem/p350_intersection_of_two_arrays_ii.rs @@ -0,0 +1,54 @@ +/** + * [350] Intersection of Two Arrays II + */ +pub struct Solution {} + +// submission codes start here +use std::collections::HashMap; + +impl Solution { + pub fn intersect(nums1: Vec, nums2: Vec) -> Vec { + let mut map = HashMap::new(); + + for i in nums1 { + let entry = map.entry(i).or_insert((0, 0)); + entry.0 += 1; + } + + for i in nums2 { + if let Some(entry) = map.get_mut(&i) { + entry.1 += 1; + } + } + + let mut result = vec![]; + for (key, value) in map.iter().filter_map(|(key, value)| { + if value.1 != 0 { + Some((*key, value.0.min(value.1))) + } else { + None + } + }) { + for _ in 0..value { + result.push(key) + } + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_350() { + assert_eq!( + vec![2, 2], + Solution::intersect(vec![1, 2, 2, 1], vec![2, 2]) + ); + } +}