diff --git a/README.md b/README.md index 995675c..7bc8d1b 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,7 @@ other languages. - Sort by Number of Bits (https://leetcode.com/problems/sort-integers-by-the-number-of-1-bits) - Make the String Great (https://leetcode.com/problems/make-the-string-great/) - Excel Column Number (https://leetcode.com/problems/excel-sheet-column-number/) +- Intersection of Two Arrays (https://leetcode.com/problems/intersection-of-two-arrays-ii) #### Medium diff --git a/src/leetcode/intersection_two.rs b/src/leetcode/intersection_two.rs new file mode 100644 index 0000000..e73540d --- /dev/null +++ b/src/leetcode/intersection_two.rs @@ -0,0 +1,35 @@ +use std::collections::HashMap; + +pub fn intersect(numbers_one: Vec, numbers_two: Vec) -> Vec { + let mut counts = numbers_one + .into_iter() + .fold(HashMap::new(), |mut acc, curr| { + *acc.entry(curr).or_insert(0) += 1; + acc + }); + + let mut result = Vec::new(); + for number in numbers_two { + if let Some(count) = counts.get_mut(&number) { + if *count > 0 { + result.push(number); + *count -= 1; + } + } + } + result +} +g +#[cfg(test)] +mod tests { + use std::vec; + + use super::intersect; + + #[test] + fn test_intersect() { + let result = intersect(vec![1, 2, 3, 3, 1, 5, 6], vec![1, 3, 3, 1]); + let expected = vec![1, 3, 3, 1]; + assert_eq!(expected, result) + } +} diff --git a/src/leetcode/mod.rs b/src/leetcode/mod.rs index 4be4645..284f02f 100644 --- a/src/leetcode/mod.rs +++ b/src/leetcode/mod.rs @@ -42,3 +42,4 @@ mod unique_occurrences; mod zero_or_one; mod sort_colors; mod rotate_digits; +mod intersection_two;