leetcode_rust/
intersection_of_two_arrays_2.rs

1#![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}