leetcode_rust/
intersection_of_two_arrays_2.rs1#![allow(dead_code)]
2
3pub fn intersect(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<i32> {
4 use std::collections::HashMap;
5
6 if nums1.is_empty() || nums2.is_empty() {
7 return vec![];
8 }
9 let mut map: HashMap<i32, i32> = HashMap::new();
10 let mut res = vec![];
11 for num in nums1 {
12 match map.get_mut(&num) {
13 Some(v) => {
14 *v += 1;
15 }
16 None => {
17 map.insert(num, 1);
18 }
19 }
20 }
21
22 for num in nums2 {
23 match map.get_mut(&num) {
24 Some(v) => {
25 if *v > 0 {
26 *v -= 1;
27 res.push(num);
28 }
29 }
30
31 None => {}
32 }
33 }
34 res
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test1() {
43 let nums1 = vec![1, 2, 2, 1];
44 let nums2 = vec![2, 2];
45 assert_eq!(intersect(nums1, nums2), vec![2, 2]);
46
47 let nums1 = vec![4, 9, 5];
48 let nums2 = vec![9, 4, 9, 8, 4];
49 assert_eq!(intersect(nums1, nums2), vec![9, 4]);
50 }
51}