Rust solution
\nimpl Solution {\n    pub fn find_difference(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<Vec<i32>> {\n        let idx = |x: i32| -> usize { (x + 1000) as _ };\n  
```\nimpl Solution {\n    pub fn find_difference(nums1: Vec<i32>, nums2: Vec<i32>) -> Vec<Vec<i32>> {\n        let idx = |x: i32| -> usize { (x + 1000) as _ };\n        let mut counter = [0_u8; 2001];\n        nums1.iter().for_each(|&x| counter[idx(x)] |= 0b01);\n        nums2.iter().for_each(|&x| counter[idx(x)] |= 0b10);\n\n        let mut res = vec![Vec::new(), Vec::new()];\n        counter.iter().enumerate().for_each(|(i, &x)| match x {\n            0b01 => res[0].push(i as i32 - 1000),\n            0b10 => res[1].push(i as i32 - 1000),\n            _ => (),\n        });\n        res\n    }\n}\n```
['Bit Manipulation', 'Rust']