aboutsummaryrefslogtreecommitdiff
path: root/num_bad_pairs.rs
blob: 88119d8286283cbeb087a29521de331d521145b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 2364. Count Number of Bad Pairs
use std::collections::HashMap;
struct Solution;

/*
 * you are given a 0-indexed integer array 'nums'. a pair of indices '(i, j)' is
 * a bad pair if 'i < j' and 'j - i != nums[j] - nums[i]'. return the total
 * number of bad pairs in 'nums'.
 */

impl Solution {
    pub fn count_bad_pairs(nums: Vec<i32>) -> i64 {
        let mut hm: HashMap<i32, i32> = 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 n1 = vec![4, 1, 3, 3];
    let n2 = vec![1, 2, 3, 4, 5];
    println!("{}", Solution::count_bad_pairs(n1)); //expect: 5
    println!("{}", Solution::count_bad_pairs(n2)); //expect: 0
}