diff --git a/src/main.rs b/src/main.rs index c61d486..32751e7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,32 @@ mod arr; struct Solution {} impl Solution { - pub fn min_number_operations(target: Vec) -> i32 { - target[0] + target.windows(2).map(|x| (x[1] - x[0]).max(0)).sum::() + pub fn get_sneaky_numbers(nums: Vec) -> Vec { + let n = nums.len() - 2; + let xor_all: i32 = nums.iter().enumerate().fold((n ^ (n+1)) as i32, |acc, (i ,&x)| acc ^ x ^ i as i32); + let mut idx = 0; + let mut calc_idx = xor_all; + while true { + if calc_idx % 2 == 1 { + break; + } + calc_idx >>= 1; + idx += 1; + } + let mut ans = vec![0;2]; + for (i,&x) in nums.iter().enumerate() { + if i < n{ + ans[i >> idx &1 as usize] ^= i as i32; + } + ans[(x >> idx &1) as usize] ^= x; + } + ans } } fn main() { - println!("{:?}", Solution::min_number_operations(vec![3,1,5,4,2])); + println!( + "{:?}", + Solution::get_sneaky_numbers(vec![2,0,2,1,0]) + ); }