use std::collections::HashMap; mod arr; struct Solution {} impl Solution { pub fn solve_queries(nums: Vec, queries: Vec) -> Vec { let mut mp = HashMap::>::new(); let n = nums.len() as i32; let mut queries = queries; for i in 0..nums.len() { if mp.contains_key(&nums[i]) { mp.get_mut(&nums[i]).unwrap().push(i); } else { mp.insert(nums[i], vec![i]); } } for i in 0..queries.len() { let arr = mp.get(&nums[queries[i] as usize]).unwrap(); if arr.len() == 1 { queries[i] = -1; continue; } let idx = arr.partition_point(|&x| x <= queries[i] as usize); if arr.len() == 2 { queries[i] = (arr[idx % arr.len()] as i32).abs_diff(queries[i]) as i32; queries[i] = queries[i].min(n - queries[i]); continue; } let mut a = arr[idx % arr.len()].abs_diff(queries[i] as usize) as i32; let mut b = arr[(idx + arr.len() - 2) % arr.len()].abs_diff(queries[i] as usize) as i32; a = a.min(n - a); b = b.min(n - b); queries[i] = a.min(b); } queries } } fn main() { println!( "{:?}", Solution::solve_queries(vec![12, 19, 12, 8, 12, 10], vec![0, 5, 3, 1]) ); } /* [[-86, 2], [-76, 2], [-46, 2]] [-84, -59] [[0, 2, 29], [0, 2, 10], [0, 2, 10]] 10 -8 -6 -4 -2 -86 -74 -46 -29 -84 -60 -59 -7 -5 -3 */