描述

447. 回旋镖的数量

给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。

返回平面上所有回旋镖的数量。

思路

三个元素的选择,计算距离

可以固定一个元素,计算和第二个的距离

代码

impl Solution {  
    pub fn number_of_boomerangs(points: Vec<Vec<i32>>) -> i32 {  
        let mut ans = 0;  
        let mut cnt = HashMap::new();  
        for p1 in &points {  
            cnt.clear();  
            for p2 in &points {  
                let d = (p1[0] - p2[0]).pow(2) + (p1[1] - p2[1]).pow(2);  
                let mut v = cnt.entry(d).or_insert(0);  
                ans += *v * 2;  
                *v += 1;  
            }  
        }  
        ans  
    }  
}

分类

#算法/brute_force