use std::collections::HashMap; mod arr; struct Solution {} impl Solution { pub fn distance(nums: Vec) -> Vec { let mut ans = vec![0_i64; nums.len()]; let mut map: HashMap> = HashMap::new(); for (i, num) in nums.iter().enumerate() { map.entry(*num).or_insert(vec![]).push(i); } for (_, v) in map.into_iter() { let mut local_len = 0; for i in 1..v.len() { local_len += v[i] - v[0]; } ans[v[0]] = local_len as i64; for i in 1..v.len() { local_len = local_len - (v[i] - v[i - 1]) * (v.len() - 1 - i) + (v[i] - v[i - 1]) * (i - 1); ans[v[i]] = local_len as i64; } } ans } } fn main() { println!("{:?}", Solution::distance(vec![1, 3, 1, 1, 2])); }