1pub struct Solution;
25impl Solution {
26 pub fn find_error_nums(nums: Vec<i32>) -> Vec<i32> {
27 let len = nums.len();
28 let xor = (1..len as i32 + 1).fold(0, |xor, x| xor ^ x);
29 let xor = nums.iter().fold(xor, |xor, x| xor ^ x);
30
31 let mut helper = 1;
32 while xor & helper == 0 {
33 helper <<= 1;
34 }
35
36 let mut xor0 = 0;
37 let mut xor1 = 0;
38 (1..len as i32 + 1).chain(nums.iter().map(|&x| x)).for_each(|x| {
39 if x & helper == 0 {
40 xor0 ^= x;
41 } else {
42 xor1 ^= x;
43 }
44 });
45 match nums.iter().any(|&x| x == xor0) {
46 true => vec![xor0, xor1],
47 false => vec![xor1, xor0],
48 }
49 }
50}
51
52#[cfg(test)]
53mod tests {
54 use super::Solution;
55
56 #[test]
57 fn test() {
58 assert_eq!(&[2,3][..], Solution::find_error_nums(vec![1,2,2,4]));
59 }
60}