描述
给定平面上 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
}
}