use std::collections::HashMap; struct Solution; /* * given: 0-indexed integer array * bad pair: (i, j) if * i < j && j - i != nums[j] - nums[i] */ impl Solution { pub fn count_bad_pairs(nums: Vec) -> i64 { let mut hm: HashMap = HashMap::with_capacity(nums.len()); let mut ans = 0; nums.iter().zip(0..).for_each(|(&x, i)| { let delta = x - i; let e = hm.entry(delta).or_default(); ans += (i - *e) as i64; *e += 1; }); ans } } fn main() { let nums1 = vec![4,1,3,3]; let nums2 = vec![1,2,3,4,5]; println!("{}", Solution::count_bad_pairs(nums1)); //expect: 5 println!("{}", Solution::count_bad_pairs(nums2)); //expect: 0 }