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